【发布时间】:2015-05-26 08:03:02
【问题描述】:
我的 WiX 安装程序可以选择在安装时创建一个桌面快捷方式,并在卸载时将其删除,CREATEDESKTOPSHORTCUT 属性会处理这个问题,所以到目前为止没有什么特别的。
执行重大升级时,快捷方式将被删除并重新创建,将其在桌面上的位置重置为第一个空闲位置。这是默认的主要升级行为,但我怎样才能保留它的位置?
显而易见的第一种方法是使用 WIX_UPGRADE_DETECTED 属性,该属性仅在运行重大升级时才存在(我只使用重大升级)。期望的行为是
- 如果产品尚未安装且
CREATEDESKTOPSHORTCUT为真,则在初始安装时创建快捷方式 - 不要在重大升级时触摸快捷方式(例如,如果存在
WIX_UPGRADE_DETECTED),无论它是否是在初始安装时创建的 - 卸载产品时删除快捷方式,如果它是在初始安装时创建的
有没有办法做到这一点?我想它可能归结为快捷方式的Component 或Feature 中的Condition 元素,但我没有启动并运行它。
编辑:
一种可能的方法是使快捷方式创建组件永久化,并引入一个附加组件,该组件仅在产品被删除(而不是重大升级)时触发,并从桌面显式删除链接文件:
<DirectoryRef Id="DesktopFolder">
<Component Id="CreateDesktopLink" Guid="My-GUID-1" Permanent="yes">
<RegistryValue ... />
<Shortcut Id="CmdShortcut" Name="My Desktop Link" Target="[SystemFolder]cmd.exe" />
</Component>
<Component Id="RemoveDesktopLink" Guid="My-GUID-2">
<RegistryValue ... />
<RemoveFile Id="RemoveDesktopLinkFile" Name="My Desktop Link.lnk" On="uninstall" />
<Condition>REMOVE=ALL AND NOT WIX_UPGRADE_DETECTED</Condition>
</Component>
</DirectoryRef>
虽然这会在卸载时留下一个孤立的组件。或者,我可以将快捷方式创建移动到自定义操作中,从而消除永久组件。
感谢任何输入。
【问题讨论】:
标签: wix windows-installer installation