如何在 运行 msiexec /x 时将 "this action is only valid for products that are currently installed" 抑制到不存在的项目?

How can I suppress "this action is only valid for products that are currently installed" upon running msiexec /x to non-existing item?

我试图在安装更新版本之前确保某些软件不存在。长话短说,vendor requires me to do so, and although they recommend me to repair after install, that causes other issues such as undesirable restart (trust me I tried /norestart and I have even 以确保它不会重新启动)但总的来说,它让我们非常头疼,却没有得到我们想要的结果。

所以我试着在安装他们的新软件之前简单地卸载这个软件,因为这似乎有更高的成功率并且没有不必要的问题。

现在我通过 ExePackage(使用 WiX 工具集)使用 Vital="no" 通过 运行 批处理文件来完成此操作。我必须做 Vital="no" 因为当旧的安装程序不存在并且如果我调用 msiexec /x,它 returns 错误说明

this action is only valid for products that are currently installed

当旧安装存在时,它工作正常,但如果不存在,它就会出错。

现在 Vital="no" 可以正常工作,但如果可以的话,我更愿意使用 msiexec /x 来抑制错误。

有什么已知的方法可以解决这个问题吗?

为了解决这个问题,我检查了卸载键,只对列出的产品调用了msiexec /x。虽然在我自己的情况下,我们正在切换安装程序技术(太多 MSI 错误......)并且正在卸载我们自己的旧版本。

安装状态:如果您知道产品的 GUID(替换此处示例 GUID):

Dim installer : Set installer = CreateObject("WindowsInstaller.Installer")
MsgBox installer.ProductState("{6C961B30-A670-8A05-3BFE-3947E84DD4E4}")

有多种可能的安装状态。 Here is a more comprehensive script to check product installation state. Check section 7 here.

主要升级:我想您知道主要升级是如何进行的? (卸载现有安装并安装较新版本,并选择发生顺序的选项)。实际上,他们可以通过其升级 table 中的设置在安装时卸载任何其他 MSI 软件包。这甚至包括有竞争力的产品(不得不说有点疯狂)。但是,您可以在 technical issues 的时间内从 MSI 中轻松再次安装它们。您可以通过 Burn setup.exe 引导程序(我认为您使用的)来安装它们。