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

时间:2016-02-11 04:45:48

标签: wix windows-installer

我有一个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&#39;标记并删除范围(0.6-0.7),同时自动删除其他以前的版本?

感谢。

1 个答案:

答案 0 :(得分:1)

我从未借此机会自己验证这一点,但应该是一种非常直接的方法来处理这个问题。要理解它,首先您必须了解FindRelatedProductsRemoveExistingProducts的作用。键位于FindRelatedProducts的第二个句子中,而第一个句子位于RemoveExistingProducts:

  

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

  

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

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

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