【发布时间】:2017-05-19 08:27:04
【问题描述】:
我正在使用 WiX Toolkit v3.11 来创建我的软件设置。在安装过程中,我使用以下代码创建开始菜单快捷方式:
<Shortcut Id='startmenuMyProgram'
Name='$(var.MyProgramName)'
Directory='ProgramMenuFolder'
WorkingDirectory='APPLICATIONFOLDER'
Advertise='yes'
Icon='icon.exe'>
<Icon Id='icon.exe' SourceFile='$(var.Setuppath)\MyProgram.exe'/>
</Shortcut>
通过这种方式,我还为其他可执行文件创建了两个快捷方式。现在卸载我想删除快捷方式。
<Component Id="removeStartmenuShortcuts" Guid="803ad14a-feab-4901-b9db-2c4a1298ae8b">
<Condition>(REMOVE=ALL) AND NOT (WIX_UPGRADE_DETECTED OR UPGRADINGPRODUCTCODE)</Condition>
<RemoveFile Id="remove_startmenuProgram1" Name="startmenuMyProgram" On="uninstall" />
<RemoveFile Id="remove_startmenuProgram2" Name="startmenuMyProgram2" On="uninstall"/>
<RemoveFile Id="remove_startmenuProgram3" Name="startmenuMyProgram3" On="uninstall"/>
</Component>
当我卸载软件时,这没有任何问题。但是当执行更新时,快捷方式也会被删除。但我想阻止这种行为,但条件似乎不起作用。因此,当我进行更新时,Windows 任务栏中的所有快捷方式都会被删除。
我怎样才能使我的更新进度正常工作?
这里是更新后的行为:
右边所有快捷键的组不见了!
【问题讨论】:
-
检查详细日志,如果您在组件条件中检查的属性具有您期望的值。像这样启用详细日志:
msiexec.exe -i yoursetup.msi -l*v logfile.txt -
所有属性都是我所期望的: Property(N): REMOVE = ALL Property(N): UPGRADINGPRODUCTCODE = {A865F4E4-D7EF-4D29-A713-242DB35CBE1A} Property(S): WIX_UPGRADE_DETECTED = {22AA6027-9FDF-4637-BEE5-CAE8D5E2AA46}
-
我突然想到,如果您通过
<Shortcut>元素安装快捷方式,它们当然会在卸载/升级时被删除。这只是正常的 Windows 安装程序行为,您甚至不需要<RemoveFile>元素。其实我根本不明白这个问题。通常,您的更新安装只会重新安装相同的快捷方式。 -
当我将 Windows 10 开始菜单左侧的快捷方式移动到右侧并进行更新时,右侧的快捷方式消失了。你知道我的意思吗?
-
我仍然不明白为什么你认为你需要带有显式
<RemoveFile>元素的removeStartmenuShortcuts组件。您的安装程序创建的所有快捷方式将在卸载时自动删除。您可能需要明确删除的唯一内容是快捷方式 folder,如 this tutorial 所示。
标签: wix windows-installer wix3.11