如何在更新过程中保持任务栏快捷方式



我有以下情况。

我的产品在c:Program Files (x86)MyCompanyMyApp中安装二进制文件,在C:ProgramDataMicrosoftWindowsStart MenuProgramsMyCompany下安装快捷方式。

我使用这个伟大的例子构建msi:https://helgeklein.com/blog/2014/09/real-world-example-wix-msi-application-installer/

我刚刚添加了以下代码

<!-- ApplicationShortcut-->
<Directory Id="ProgramMenuFolder">
<Directory Id="ApplicationProgramsFolder" Name="!(loc.ManufacturerName)">
<Component Id="ApplicationShortcut" Guid="F4B7EAFA-FF19-41B4-8267-3AEFC12235A7">
<Shortcut Id="ApplicationStartMenuShortcut"
Name="!(loc.ApplicationName)"
Description="!(loc.ProductDescription)"
Target="[INSTALLDIR]MyApp.exe"
WorkingDirectory="INSTALLDIR"
/>
<RemoveFolder Id="RemoveApplicationProgramsFolder" Directory="ApplicationProgramsFolder" On="uninstall"/>
<RegistryValue Root="HKCU" Key="Software!(loc.ManufacturerName)!(loc.ApplicationName)" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
</Component>
</Directory>
</Directory>

问题是以下

  • 我第一次安装应用程序,它会很好地安装快捷方式
  • 现在我启动应用程序并选择Pin to taskbar, this will create a shortcut inC:\Users\\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar`
  • 如果我重新构建msi并再次执行安装程序,任务栏快捷方式将无法再单击,因为C:Users<user>AppDataRoamingMicrosoftInternet ExplorerQuick LaunchUser PinnedTaskBar中的快捷方式丢失了

是否可以在更新期间维护任务栏快捷方式?

我在这里找到了答案:https://stackoverflow.com/a/33402698/98491

<InstallExecuteSequence>
<RemoveShortcuts>Installed AND NOT UPGRADINGPRODUCTCODE</RemoveShortcuts>
</InstallExecuteSequence>

这样可以防止在更新过程中卸载快捷方式。

正如评论中所述,缺点是卸载后,TaskBarShortCut仍然存在,但这是用户可能期望的。每次他更新软件时都必须重新创建一个固定的任务栏快捷方式,这是不可能的。

最新更新