Wix在安装期间使用命令行卸载产品

时间:2013-09-26 10:32:10

标签: wix windows-installer wix3.5 wix3.6

我做了Wix project尝试安装一个简单的.txt示例文件。但是,作为先决条件,我想卸载以前的应用程序。

为此,我知道msiexec允许您通过简单地写下来卸载产品:

msiexec /x {PRODUCT_CODE}

在命令行上。

幸运的是,我知道这个PRODUCT_CODE,所以我尝试在安装开始之前创建一个CustomAction来卸载该产品,如下所示:

<CustomAction Id="PropertyAssign" Property="SilentLaunch" Value="msiexec.exe /x {EA29682C-7DA1-441C-BF3E-702491F59258}" Execute="immediate" />
<CustomAction Id="SilentLaunch" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" Impersonate="no" />

<InstallUISequence>
  <Custom Action="PropertyAssign" After="CostFinalize" />
  <Custom Action="SilentLaunch" After="PropertyAssign" />
</InstallUISequence>

但是当我运行.msi时,它表示代码 2762 出现意外错误并退出安装。

我知道错误就在那条线上,好像我擦掉它,一切顺利。

如何运行该命令行没有任何错误?

1 个答案:

答案 0 :(得分:3)

UI序列永远不应该更改机器的状态。它应该只收集,验证和向用户报告数据。必须在执行顺序中进行所有更改。

Windows / MSI(_MSIExecute)中有一个互斥锁,它为每台计算机强制执行一个执行序列。因此,您无法从MSI调用msiexec。但您可以做的是创建一个主要升级规则来检测其他产品并将其删除。 Windows Installer标准操作RemoveExisitingProducts可以卸载任何MSI,而不仅仅是以前的版本。