Wix无法创建快捷方式

时间:2016-12-08 11:51:58

标签: c# wix

我正在开发一个C#应用程序。我有一个安装程序Wix,我想为我的应用程序创建快捷方式。经过一些研究,我找到了一个代码来创建桌面和开始菜单的快捷方式。

有我的代码:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ProgramMenuFolder">
    <Directory Id="ApplicationProgramsFolder" Name="$(var.compagny)"/>
  </Directory>
  <Directory Id="DesktopFolder" SourceName="Desktop"/>
</Directory>

<!-- Shortcuts -->
<DirectoryRef Id="ApplicationProgramsFolder">
  <Component Id="ApplicationShortcut" Guid="*">
    <Shortcut Id="ApplicationStartMenuShortcut"
              Name="$(var.product)"
              Description="$(var.product) application"
              Target="MyApplication.exe"
              WorkingDirectory="INSTALLFOLDER"/>
    <RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/>
    <RegistryKey Root="HKCU" Key="SOFTWARE\$(var.compagny)\$(var.product)">
      <RegistryValue  Name="installed" Type="integer" Value="1" KeyPath="yes" />
    </RegistryKey>
  </Component>
</DirectoryRef>
<DirectoryRef Id="DesktopFolder">
  <Component Id="ApplicationShortcutDesk" Guid="*">
    <Shortcut Id="ApplicationStartDeskShortcut"
              Name="$(var.product)"
              Description="$(var.product) application"
              Target="MyApplication.exe"
              WorkingDirectory="INSTALLFOLDER"/>
    <RemoveFolder Id="DesktopFolder" On="uninstall"/>
    <RegistryKey Root="HKCU" Key="SOFTWARE\$(var.compagny)\$(var.product)">
      <RegistryValue Name="installed" Type="integer" Value="1" KeyPath="yes"/>
    </RegistryKey>
  </Component>
</DirectoryRef>

<Feature Id="ProductFeature" Title="$(var.product)" Level="1">
  <ComponentRef Id="ApplicationShortcut"/>
  <ComponentRef Id="ApplicationShortcutDesk"/>
</Feature>

之后,在安装了密钥的HKCU \ SOFTWARE \ MyCompagny \ Product中创建一个寄存器。但没有捷径。

我错过了什么?

编辑:

有日志:

  

MSI(s)(5C:B8)[14:51:31:801]:执行操作:ActionStart(Name = CreateShortcuts,Description =创建快捷方式,Template = Shortcut:[1])

     

动作14:51:31:CreateShortcuts。创建快捷方式

     

MSI(5C:B8)[14:51:31:802]:执行操作:IconCreate(Icon = icone.ico,Data = BinaryData)

     

CreateShortcuts:快捷方式:icone.ico

     

MSI(5C:B8)[14:51:31:808]:执行操作:SetTargetFolder(Folder = 23 \ MyCompagny)

     

MSI(5C:B8)[14:51:31:810]:SHELL32 :: SHGetFolderPath返回:C:\ ProgramData \ Microsoft \ Windows \ Start Menu \ Programs

     

MSI(5C:B8)[14:51:31:810]:执行操作:SetTargetFolder(Folder = 25)

     

MSI(5C:B8)[14:51:31:812]:SHELL32 :: SHGetFolderPath返回:C:\ Users \ Public \ Desktop

     

MSI(5C:B8)[14:51:31:812]:执行操作:ActionStart(Name = WriteRegistryValues,Description =编写系统注册表值,Template = Key:[1],Name:[2 ],价值:[3])

     

动作14:51:31:WriteRegistryValues。编写系统注册表值

     

MSI(5C:B8)[14:51:31:812]:执行操作:ProgressTotal(总计= 2,类型= 1,字节等效= 13200)

     

MSI(5C:B8)[14:51:31:813]:执行op:RegOpenKey(Root = -2147483647,Key = SOFTWARE \ MyCompagny \ MyApplication ,, BinaryType = 0 ,,)

     

MSI(5C:B8)[14:51:31:813]:执行操作:RegAddValue(名称=已安装,值=#1,)

     

WriteRegistryValues:Key:\ SOFTWARE \ MyCompagny \ MyApplication,Name:installed,Value:#1

     

MSI(5C:B8)[14:51:31:813]:执行操作:RegAddValue(名称=已安装,值=#1,)

     

WriteRegistryValues:Key:\ SOFTWARE \ MyCompagny \ MyApplication,Name:installed,Value:#1

2 个答案:

答案 0 :(得分:1)

您未正确使用DesktopFolder属性。

认为的快捷方式将进入C:\Desktop\

这是因为您重命名了Well定义的属性&#34; DesktopFolder&#34;参考&#34;桌面&#34;所以现在你在[TARGETDIR]\[DesktopFolder]设置一个快捷方式,如上所述通常是C:\Desktop\

您想要使用

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ProgramMenuFolder">
    <Directory Id="ApplicationProgramsFolder" Name="$(var.compagny)"/>
  </Directory>
  <Directory Id="DesktopFolder"/>
</Directory>

在DesktopFolder上注意没有Name=""

你也一定要删除

<RemoveFolder Id="DesktopFolder" On="uninstall"/>
来自ApplicationShortcutDesk组件的

,我想说只有在你知道你拥有并使用安装创建的文件夹上使用RemoveFolder。

答案 1 :(得分:0)

您需要确保功能列表中引用了快捷键组件。这是一个例子:

<Feature Id="ProductFeature" Title="ProductTitle" Level="1">
    <ComponentRef Id='ApplicationShortcutDesk' />
</Feature>

希望有所帮助!