代码之家  ›  专栏  ›  技术社区  ›  Sonhja

Wix在安装过程中使用命令行卸载产品

  •  1
  • Sonhja  · 技术社区  · 11 年前

    我做了一个 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 回复  |  直到 11 年前
        1
  •  3
  •   Christopher Painter    11 年前

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

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