将msiexec / x运行到不存在的项目时,如何抑制“此操作仅对当前安装的产品有效”?

问题描述

在安装较新版本之前,我试图确保某些软件不存在。长话短说,vendor requires me to do so,尽管他们建议我在安装后进行修复,但这会引起其他问题,例如意外重启(相信我,我尝试过/ norestart,甚至还有tried to modify the stored msi package来确保它不会重新启动),但总的来说,这给我们带来了太多头痛,而没有我们想要的结果。

所以我试图在安装更新的软件之前先卸载该软件,因为这样做似乎成功率更高,而且没有不必要的问题。

现在,我通过使用带有Vital =“ no”的ExePackage(带有WiX工具集)运行批处理文件来完成此任务。我必须执行Vital =“ no”,因为当较旧的安装程序不存在并且如果我调用msiexec /x时,它将返回错误说明

此操作仅对当前安装的产品有效

存在较旧的安装时,它可以正常工作,但如果不存在,则会出错。

现在Vital =“ no”可以正常工作,但是如果可以的话,我想用msiexec /x来抑制该错误

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

解决方法

为了解决此问题,我检查了卸载密钥,并仅在列出的产品上调用msiexec /x。尽管就我个人而言,我们正在切换安装程序技术(太多MSI错误...),并正在卸载我们自己的旧版本。

,

安装状态 :如果知道产品的GUID,则可以使用VBScript检查产品的安装状态(在此处替换示例GUID):

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

有许多可能的安装状态。 Here is a more comprehensive script检查产品安装状态。 Check section 7 here

主要升级 :我假设您知道主要升级的工作原理? (卸载现有安装并安装较新版本,并提供有关发生此顺序的选项)。实际上,他们可以通过升级表中的设置来卸载安装时安装的任何其他MSI软件包。这甚至包括竞争性产品(不得不说有点疯狂)。但是,您不能-从MSI内轻松地为多个technical issues重新安装它们。您可以通过Burn setup.exe引导程序(我认为您使用的是)来安装它们。