Wix 无法创建快捷方式

Posted

技术标签:

【中文标题】Wix 无法创建快捷方式【英文标题】:Wix unable to create shortcut 【发布时间】:2016-12-08 11:51:57 【问题描述】:

我正在开发一个 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=Creating shortcuts,Template=Shortcut: [1])

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

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

CreateShortcuts:快捷方式:icone.ico

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

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

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

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

MSI (s) (5C:B8) [14:51:31:812]: 执行操作: ActionStart(Name=WriteRegistryValues,Description=Writing system registry values,Template=Key: [1], Name: [2 ],值:[3])

行动 14:51:31:WriteRegistryValues。写入系统注册表值

MSI (s) (5C:B8) [14:51:31:812]:执行操作:ProgressTotal(Total=2,Type=1,ByteEquivalent=13200)

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

MSI (s) (5C:B8) [14:51:31:813]:执行操作:RegAddValue(Name=installed,Value=#1,)

WriteRegistryValues:键:\SOFTWARE\MyCompagny\MyApplication,名称:已安装,值:#1

MSI (s) (5C:B8) [14:51:31:813]:执行操作:RegAddValue(Name=installed,Value=#1,)

WriteRegistryValues:键:\SOFTWARE\MyCompagny\MyApplication,名称:已安装,值:#1

【问题讨论】:

可能是 Guid 的问题吗? (我不知道它是如何工作的) 【参考方案1】:

您错误地使用了DesktopFolder 属性。

认为你的快捷方式是C:\Desktop\

这是因为您将定义明确的属性“DesktopFolder”重命名为引用“Desktop”,所以现在您将快捷方式放在[TARGETDIR]\[DesktopFolder],如上所述,通常为C:\Desktop\

你想用

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

注意桌面文件夹上没有Name=""

你也绝对应该删除

<RemoveFolder Id="DesktopFolder" On="uninstall"/>

从 ApplicationShortcutDesk 组件中,我想说只在您知道自己拥有并通过安装创建的文件夹上使用 RemoveFolder。

【讨论】:

有了你的回答并用Target="[#MyApplication.exe]"替换我的两个目标,它就可以工作了。谢谢【参考方案2】:

您需要确保您的快捷方式组件在您的Feature列表中被引用。这是一个例子:

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

希望有帮助!

【讨论】:

我忘了在我的问题中插入这部分,但我做到了。无论如何它都不起作用。我已经阅读了很多关于此的主题,但我没有发现我做错了什么。

以上是关于Wix 无法创建快捷方式的主要内容,如果未能解决你的问题,请参考以下文章

使用 WiX 创建桌面快捷方式

Wix 为所有用户/每台机器创建非广告快捷方式

如何在 WIX 中为所有用户创建桌面快捷方式

在 WIX 中运行时为快捷方式动态分配名称

在WIX中创建使用环境变量的文件夹的快捷方式

wix 快捷方式 xsl 文件