【问题标题】:Retain desktop shortcut position on major upgrade in WiX在 WiX 的主要升级中保留桌面快捷方式位置
【发布时间】:2015-05-26 08:03:02
【问题描述】:

我的 WiX 安装程序可以选择在安装时创建一个桌面快捷方式,并在卸载时将其删除,CREATEDESKTOPSHORTCUT 属性会处理这个问题,所以到目前为止没有什么特别的。

执行重大升级时,快捷方式将被删除并重新创建,将其在桌面上的位置重置为第一个空闲位置。这是默认的主要升级行为,但我怎样才能保留它的位置?

显而易见的第一种方法是使用 WIX_UPGRADE_DETECTED 属性,该属性仅在运行重大升级时才存在(我只使用重大升级)。期望的行为是

  • 如果产品尚未安装且CREATEDESKTOPSHORTCUT 为真,则在初始安装时创建快捷方式
  • 不要在重大升级时触摸快捷方式(例如,如果存在WIX_UPGRADE_DETECTED),无论它是否是在初始安装时创建的
  • 卸载产品时删除快捷方式,如果它是在初始安装时创建的

有没有办法做到这一点?我想它可能归结为快捷方式的ComponentFeature 中的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


    【解决方案1】:

    您无法保留快捷方式 - 至少在广告快捷方式的默认情况下不会。这些快捷方式包含对产品、组件和功能的引用,有时还包含可能位于缓存 MSI 二进制表中的图标。其中至少有两个会随着升级而改变。

    这会给您留下非广告的快捷方式或您自己创建的快捷方式,尝试保留位置可能会奏效。

    也许您可以枚举桌面图标(搜索有代码示例),这样您就可以将图标放回原来的位置,因为这适用于所有类型的快捷方式,您无需更改升级逻辑。只需找出它当前所在的位置,然后在安装后再次找到它并将其移动到原来的位置。

    【讨论】:

      【解决方案2】:

      如何在 InstallFinalize 之后对“RemoveExistingProducts”标准操作进行排序?

      这样做意味着安装较新的产品,然后卸载较旧的产品。安装新产品时,创建快捷方式的组件的引用计数将增加到 2,因此当卸载旧产品时,创建快捷方式的组件将保持不变。

      我只是认为这是另一种可能的解决方案。

      但是,重新排序“RemoveExistingProducts”是您必须深入思考的事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-15
        • 1970-01-01
        • 2014-01-21
        • 2012-08-05
        • 2022-08-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多