有条件地卸载 Wix 中的先前版本

Posted

技术标签:

【中文标题】有条件地卸载 Wix 中的先前版本【英文标题】:Conditional uninstall of previous version in Wix 【发布时间】:2010-12-16 05:25:47 【问题描述】:

我正在为用于调试嵌入式 ARM 内核 (OpenOCD) 的软件安装安装程序,此安装程序会自动删除以前的版本 - 这很简单。但是,有时由于各种(不)兼容性问题等原因,需要安装多个版本(每个版本都有自己的文件夹,因此这里没有冲突)。

我正在尝试创建一个安装程序,它可以在功能树(或其他任何地方)中选择卸载(或不卸载)以前的版本。

基本上有这个安装顺序:

<InstallExecuteSequence>
    <Custom Action="NewerVersionDetected" After="FindRelatedProducts">DOWNGRADE</Custom>
    <RemoveExistingProducts After="InstallFinalize"/>
</InstallExecuteSequence>

我知道 RemoveExistingProducts 可以通过在 RemoveExistingProducts 标记之间放置条件来设置条件,但是......条件应该是什么?有很多关于使功能有条件或关于操作系统版本和一些注册表项等条件的信息,但我没有找到任何关于“用户定义条件”的有用信息......

假设在特征树中有这个元素:

<Feature Id="UninstallOlderVersionFeature" Title="Uninstal previous versions" Level="1" Description="..."/>

如何根据此功能(或用户在安装期间可以选择的任何其他方法 - 问题框或单独的窗口或任何其他方法)使卸载以前版本的条件?

感谢任何帮助(我和安装程序的用户),因为我不太擅长 Wix 和 XML(我是嵌入式人员 (;)

如果需要有关整个 Wix 文件的更多详细信息,请告诉我,我会发布相关信息。

【问题讨论】:

【参考方案1】:

试试这个:

<RemoveExistingProducts After="InstallFinalize">
<![CDATA[&UninstallOlderVersionFeature=3]]>
</RemoveExistingProducts>

这是选择功能的状态。 “3”表示选择了该功能进行安装。

【讨论】:

以上是关于有条件地卸载 Wix 中的先前版本的主要内容,如果未能解决你的问题,请参考以下文章

如何根据目标机器(32 位或 64 位)有条件地使用 WiX 安装文件?

如何实现 WiX 安装程序升级?

确定先前软件包版本的 WiX 错误

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

无需卸载的 Wix 安装程序升级

Wix“高级”安装不会卸载以前的版本