我正在编写一个安装程序,其中包含使用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之外的其他代码
更新:我不想影响返回代码,我想获得适当的代码而不是一般的致命错误
答案 0 :(得分:2)
您无法控制msiexec.exe
的返回代码。其返回码are documented和列表是全面的。该服务根据安装状态确定退出代码。
更新:我唯一能建议的是直接使用数据库功能:
MsiOpenPackage
和MsiDoAction("FindRelatedProducts")
运行FindRelatedProducts
操作,该操作将通过处理Upgrade table评估SELFFOUND
和NEWERFOUND
属性。MsiGetProperty
分析属性。MsiCloseHandle
关闭包裹。使用获得的SELFFOUND
和NEWERFOUND
值,您可以决定是否需要安装产品。如果是,您可以运行msiexec.exe
或使用MsiInstallProduct
。
Disclamer:我从未试图做过这样的事情,我不确定它会起作用。它应该,但看起来并不容易。