我有一个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 回答
我应该是一种非常直接的方法来处理这个问题 . 要理解它,首先你必须了解FindRelatedProducts和RemoveExistingProducts的作用 . 键位于FindRelatedProducts的第二个句子中,而第一个句子位于RemoveExistingProducts:
鉴于您希望始终删除在
FORCEREMOVEOLDVERSION
和OLDERVERSIONDETECTED
中找到并存储的任何先前版本,但有条件地删除任何版本foun并存储在SELECTIVELY_UNINSTALL
中,您所要做的就是有条件地清除属性SELECTIVELY_UNINSTALL
. 在更复杂的场景中,您甚至可以解析存储在ActionProperty引用的属性中的产品代码列表,并仅删除其中的一部分 .请注意,这不允许您通过向动作属性添加产品代码来解决
ALLUSERS
必须匹配的要求 .