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 无法创建快捷方式的主要内容,如果未能解决你的问题,请参考以下文章