Installation MSI安装失败,因为;已安装此产品的另一个版本";

Installation MSI安装失败,因为;已安装此产品的另一个版本";,installation,windows-installer,Installation,Windows Installer,我们使用带有以下命令行选项的MSIEXEC安装应用程序(MSI): MsiExec.exe /x{code} /qn /liwearucmopvx+ C:\Log\UnInstall.tra MsiExec.exe /iC:\Source\App.msi /qn TARGETDIR=C:\Install ALLUSERS=1 /liwearucmopvx+ %C:\Log\Install.tra 大多数情况下,这是可行的,但有时卸载失败(还不确定原因,查看错误)。无论如何,当这种情况发生时,我

我们使用带有以下命令行选项的MSIEXEC安装应用程序(MSI):

MsiExec.exe /x{code} /qn /liwearucmopvx+ C:\Log\UnInstall.tra
MsiExec.exe /iC:\Source\App.msi /qn TARGETDIR=C:\Install ALLUSERS=1 /liwearucmopvx+ %C:\Log\Install.tra
大多数情况下,这是可行的,但有时卸载失败(还不确定原因,查看错误)。无论如何,当这种情况发生时,我在重新安装过程中会出现以下错误:

Another version of this product is already installed.  Installation of this version cannot continue.  To configure or remove the existing version of this product, use Add/Remove Programs on the Control Panel

有没有办法绕过这个?这意味着要确保我们始终重新安装(如果存在,我们可以简单地自动将其吹走?

如果卸载失败,产品仍将在系统上注册-根据故障发生的位置,卸载将回滚,使产品仍然安装

如果您试图在现有安装的基础上重新安装具有相同产品代码但不同版本的产品,MSI将正确地抱怨该产品仍在安装。如果要实现升级行为,则需要更改产品代码并将条目写入升级表,以便MSI能够区分新旧产品,并在发布新版本之前或之后使用RemoveExistingProducts操作删除旧产品

如果您想了解卸载失败的原因,您需要查看日志,通常需要查找“返回值3”,这是失败安装操作的签名。

检查,基本上您需要设置msidUpgradeAttributesVersionMaxInclusive位

您不需要说明您正在使用什么来构建安装程序,如果您正在使用或更高版本,您可以使用
MajorUpgrade/@AllowSameVersionUpgrades=“yes”
为您解决此问题

请注意,因为MSI忽略了 第四个产品版本字段,设置 将此属性设置为“是”也允许 当前三个 产品版本字段相同。 例如,产品版本1.0.0.1 将“升级”1.0.0.2998,因为 他们被视为同一个版本 (1.0.0). 这可能会重新引入 严重的错误,所以最安全的选择是 要更改前三个版本 字段,并忽略此属性以获取 默认的no

请注意,以下VBScript将通过搜索已安装产品的列表并查找软件包代码本身,按名称删除软件包,而不必记住软件包代码(如果使用连续集成的自动生成的软件包代码,这将是一件非常痛苦的事)

选项显式
Dim产品名称、产品代码、安装程序
productName=“我的应用程序”
Set installer=Wscript.CreateObject(“WindowsInstaller.installer”)
对于installer.Products中的每个productCode
如果InStr(1,LCase(installer.ProductInfo(productCode,“ProductName”)),LCase(ProductName)),则退出以获取
下一个
如果不是IsEmpty(productCode),则
昏暗的天气
设置WshShell=CreateObject(“WScript.Shell”)
设置oExec=WshShell.Exec(“msiexec/x”和productCode&“/qb/l*v”“%temp%\UninstallApp.log”“”)
如果结束

这个问题比较老,但现有的答案缺少问题和解决方案的本质,但对其他场景有用:

  • 如果卸载失败,您会遇到严重问题,最好的办法就是对此进行分析-否则您以后可能会遇到更多麻烦

  • 至少,我会编写一个小脚本/程序,在您尝试安装新的MSI之前,使用卸载的返回值,或者更强大的测试(如果MSI仍然安装) 如果有人对此感兴趣,我会提供更多的信息,但在其他问题中已经有相关信息

  • 其他一些答案建议您使用主要升级(在这种情况下,每个新构建都可以/应该是正确的主要升级,至少作为建议)。这是一个很好的建议,但如果卸载“有时”失败,则没有帮助。 此外,必须指出的是,您提到的错误通常表明您尚未使用主要升级。 如果卸载确实有问题,那么大型升级可能会增加问题,因为根据配置,它可以第二次安装产品MSI,并且您对此有两个MSI参考,这对您来说仍然是一个产品。更多的细节将导致太远。请记住,在执行进一步的更新步骤之前,必须确保(始终)正常卸载或至少对此进行测试

  • saschabeaumont的剧本很短很好。它所做的是确保您确实使用了正确的产品代码。主要的需求是,因为它每次都要改变,所以你需要进行一次重大的升级。。。 在您的情况下:这只解决了一种情况,即卸载可能失败的原因


  • 你正在制作MsiExec程序吗?或者这个问题属于其他地方;-)不确定你所说的“使其成为程序”是什么意思?stackoverflow,顾名思义,是一个程序员网站,AFAIK。这是一个合法的问题。添加
    msi
    installer
    标签以获得更多关注。至于错误:当我尝试安装具有相同主版本、次版本和修订版本的安装项目(MSI)时,我会遇到相同的错误。如果新的安装程序有更高的版本,MSI将为我们正确安装。一旦您整理了产品启发,那么您需要考虑在哪里安排RemoveExistingProducts。如果您的文件版本号在不同版本之间没有更改,那么请提前将REP计划为“卸载然后重新安装”,但请注意不要破坏升级过程中可能需要保留的任何本地状态…此设置使我的测试安装程序能够自行修复,以便我可以成功卸载它。