【问题标题】:WiX Installer removes shortcut on upgradeWiX 安装程序删除了升级快捷方式
【发布时间】: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}
  • 我突然想到,如果您通过&lt;Shortcut&gt; 元素安装快捷方式,它们当然会在卸载/升级时被删除。这只是正常的 Windows 安装程序行为,您甚至不需要 &lt;RemoveFile&gt; 元素。其实我根本不明白这个问题。通常,您的更新安装只会重新安装相同的快捷方式。
  • 当我将 Windows 10 开始菜单左侧的快捷方式移动到右侧并进行更新时,右侧的快捷方式消失了。你知道我的意思吗?
  • 我仍然不明白为什么你认为你需要带有显式 &lt;RemoveFile&gt; 元素的 removeStartmenuShortcuts 组件。您的安装程序创建的所有快捷方式将在卸载时自动删除。您可能需要明确删除的唯一内容是快捷方式 folder,如 this tutorial 所示。

标签: wix windows-installer wix3.11


【解决方案1】:

您可以组合 2 个组件。这样你就不需要使用条件语句了。

注册表值是在组件下设置一个keypath。

  <Component Id="cmpstartmenuMyProgram" Guid="{67CB4F7A-5028-4697-A47F-DE99110B9645}">
    <Shortcut Id="Shortcut.ApplicationName"
              Name="ApplicationName"
              Target="[INSTALLDIR]ApplicationName.exe"
              WorkingDirectory="INSTALLDIR"
              Directory="StartMenuFolder"
              Icon="Icon.exe"/>
    <RemoveFile Id="RemoveStartMenuShortcut.ApplicationName" Name="ApplicationName" Directory="StartMenuFolder" On="uninstall"/>
    <RegistryValue Root="HKCU" Key="Software\Compony\ComponyName" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
  </Component>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多