WIX MajorUpgrade并返回代码

时间:2012-07-09 15:26:22

标签: wix windows-installer

我正在编写一个安装程序,其中包含使用WIX构建的MSI程序包。我在运行msiexec后检查返回码并跳过一些错误代码。例如,当返回代码为1638(产品已安装)时,用户不应收到错误

但是当安装旧版本的产品时,返回码为1603(未知错误)。我也想跳过这种情况(用户已经获得更新的版本)

Wix代码是

<Upgrade Id="<GUID>">
    <UpgradeVersion Minimum="$(var.product_version)" OnlyDetect="yes" Property="NEWERFOUND" />
    <UpgradeVersion Minimum="0.1.0" IncludeMinimum="yes" Maximum="$(var.product_version)" IncludeMaximum="no" Property="SELFFOUND" />
</Upgrade>

<MajorUpgrade DowngradeErrorMessage=You have installed newer version $(var.product_name)." />

问题是当激活SELFFOUND或NEWERFOUND属性时,如何返回除1603之外的其他代码

更新:我不想影响返回代码,我想获得适当的代码而不是一般的致命错误

1 个答案:

答案 0 :(得分:2)

您无法控制msiexec.exe的返回代码。其返回码are documented和列表是全面的。该服务根据安装状态确定退出代码。

更新:我唯一能建议的是直接使用数据库功能:

  1. MsiOpenPackage
  2. MsiDoAction("FindRelatedProducts")运行FindRelatedProducts操作,该操作将通过处理Upgrade table评估SELFFOUNDNEWERFOUND属性。
  3. 然后使用MsiGetProperty分析属性。
  4. 使用MsiCloseHandle关闭包裹。
  5. 使用获得的SELFFOUNDNEWERFOUND值,您可以决定是否需要安装产品。如果是,您可以运行msiexec.exe或使用MsiInstallProduct

    Disclamer:我从未试图做过这样的事情,我不确定它会起作用。它应该,但看起来并不容易。