首页 文章

Wix安装程序有选择地卸载以前的版

提问于
浏览
0

我有一个wix安装程序,用于安装不同版本的软件 . 允许并行安装相同的软件(diff版本) . wix产品代码为'*',因此它始终是一次重大升级 .

现在,我需要有选择地卸载以前版本的软件 . 为此,我已经在UpgradeVersion标签中定义了版本范围?

<Upgrade Id="ID">
  <UpgradeVersion  Minimum="0.0.0.0" Maximum="0.5.0.0" IncludeMinimum="yes" IncludeMaximum="no" Property="FORCEREMOVEOLDVERSION" />
  <UpgradeVersion  Minimum="0.6.0.0" Maximum="0.7.0.0" IncludeMinimum="yes" IncludeMaximum="yes" Property="SELECTIVELY_UNINSTALL" />
  <UpgradeVersion  Minimum="0.8.0.0" Maximum="1.5" IncludeMinimum="yes" IncludeMaximum="yes" Property="OLDERVERSIONDETECTED" />
</Upgrade>

这非常有效 . 但是,当我必须有选择地卸载范围0.6 - 0.7时,我如何单独执行此操作,因为只有一个RemoveExistingProducts标记 .

<InstallExecuteSequence>
    <RemoveExistingProducts Overridable="no"  Before="InstallInitialize" /> 
</InstallExecuteSequence>

您能否建议可以检查'SELECTIVELY_UNINSTALL'标志并删除范围(0.6-0.7),同时自动删除其他先前版本?

谢谢 .

1 回答

  • 1

    我应该是一种非常直接的方法来处理这个问题 . 要理解它,首先你必须了解FindRelatedProductsRemoveExistingProducts的作用 . 键位于FindRelatedProducts的第二个句子中,而第一个句子位于RemoveExistingProducts:

    当FindRelatedProducts检测到升级信息与已安装产品之间的对应关系时,它会将产品代码附加到UpgradeTable的ActionProperty列中指定的属性 .

    RemoveExistingProducts操作将遍历Upgrade表的ActionProperty列中列出的产品代码,并通过调用并发安装来按顺序删除产品 .

    鉴于您希望始终删除在 FORCEREMOVEOLDVERSIONOLDERVERSIONDETECTED 中找到并存储的任何先前版本,但有条件地删除任何版本foun并存储在 SELECTIVELY_UNINSTALL 中,您所要做的就是有条件地清除属性 SELECTIVELY_UNINSTALL . 在更复杂的场景中,您甚至可以解析存储在ActionProperty引用的属性中的产品代码列表,并仅删除其中的一部分 .

    请注意,这不允许您通过向动作属性添加产品代码来解决 ALLUSERS 必须匹配的要求 .

相关问题