MSI安装失败,因为“已安装此产品的另一个版本”

我们使用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

有没有一种方法可以绕过这一点? 这意味着,以确保我们随时重新安装(如果存在的话,我们可以简单地自动吹去?)

--------------解决方案-------------

查看MSDN文档上的升级表,基本上你需要设置msidbUpgradeAttributesVersionMaxInclusive位。

你做,你正在使用什么来构建您的安装,如果您正在使用WiX的3.5或更高版本可以使用不在状态[email protected]="yes"照顾这个要求。

请注意,因为MSI忽略了第四个版本的产品领域,设置该属性设置为yes也可以降级时的前三个产品版本域是相同的。 例如,因为他们被视为相同的版本(1.0.0)产品版本1.0.0.1将“升级”1.0.0.2998。 这可能再次提出严重的bug所以最安全的选择是改变前三个版本字段,并省略这个属性来获得无默认值。

请注意,而不必(如果你使用的是自动生成的代码包持续集成一个真正的痛苦),通过搜索已安装的产品列表,找到包代码本身要记得包代码下面的VBScript将名称中删除软件包。

Option Explicit
Dim productName, productCode, installer
productName = "My Application"

Set installer = Wscript.CreateObject("WindowsInstaller.Installer")

For Each productCode In installer.Products
If InStr(1, LCase(installer.ProductInfo(productCode, "ProductName")), LCase(productName)) Then Exit For
Next

If Not IsEmpty(productCode) Then
Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("msiexec /x " & productCode & " /qb /l*v ""%temp%\UninstallApp.log"" ")
End If

如果卸载失败的产品仍然会在系统上注册 - 取决于其中发生故障卸载将回退,离开产品仍然安装。

如果您尝试重新安装使用相同的产品代码,但不同版本的现有安装MSI会抱怨,正确的顶级产品,该产品仍安装。 如果你想实现升级的行为,则需要更改产品代码和项写入到升级表,以便微星能够在新老产品之间的区别,并使用RemoveExistingProducts操作之前或之后的较新版本删除旧的产品放下。

如果你想知道为什么卸载失败,你需要看日志,通常希望“返回值3”,这是一个失败的安装操作的签名。

现在的问题是很老,但现有的答案失踪的问题和解决方案的精髓,而其他情况下很有用:

  1. 如果卸载失败 ,你有一个严重的问题,没有比这-分析否则你可能会得到更多的麻烦以后更好的办法。
  2. 至少,我会写一个小脚本/程序,它使用或卸载,甚至更强大的,测试的返回值,如果MSI仍然installed-,然后再尝试安装新的MSI。
    我会提供更多的信息,如何做到这一点,如果有这个兴趣,但已在其他问题上的SO信息。
  3. 一些其他的答案推荐,你应该使用主要升级(每个新版本可以/应该是在这种情况下正确的重大升级,至少作为一个建议)。 这是一个很好的建议,但并没有帮助,如果卸载的是失败的“,有时”。 此外,它是非常重要的国家,大多数时候,你提到,错误显示,不使用主要升级了。 如果你真的与卸载程序问题,那么一个重大的升级可能会增加的问题,因为依赖于配置,它可以安装该产品的第二次微星明智的,你必须在这两微星引用,什么仍然是一个产品的您。 更多细节将导致太远。 只要记住,这是(总是)工作卸载或至少是一个考验面前进一步的更新步骤放心。
  4. saschabeaumont脚本是非常短的,漂亮。 它是什么做的,是保证,那你真的使用了正确的产品代码。 主要需要的是,因为它有改变时,都产生了重大升级......你的情况:这只能解决一个场景,为什么你卸载可能失败...
分类:安装 时间:2012-11-14 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.315 (s). 9 q(s)