我有一个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),同时自动删除其他以前的版本?
感谢。
答案 0 :(得分:1)
我从未借此机会自己验证这一点,但应该是一种非常直接的方法来处理这个问题。要理解它,首先您必须了解FindRelatedProducts和RemoveExistingProducts的作用。键位于FindRelatedProducts的第二个句子中,而第一个句子位于RemoveExistingProducts:
当FindRelatedProducts检测到升级信息与已安装产品之间的对应关系时,它会将产品代码附加到UpgradeTable的ActionProperty列中指定的属性。
RemoveExistingProducts操作会遍历Upgrade表的ActionProperty列中列出的产品代码,并通过调用并发安装来按顺序删除产品。
鉴于您希望始终删除在FORCEREMOVEOLDVERSION
和OLDERVERSIONDETECTED
中找到并存储的所有先前版本,但有条件地删除SELECTIVELY_UNINSTALL
中存储和存储的任何版本,您所要做的就是有条件地清除财产SELECTIVELY_UNINSTALL
。在更复杂的场景中,您甚至可以解析存储在ActionProperty引用的属性中的产品代码列表,并仅删除其中的一些。
请注意,这不允许您通过向动作属性添加产品代码来解决ALLUSERS
必须匹配的要求。