MSI Install Fails because “Another version of this product is already installed”

前端 未结 3 732
野性不改
野性不改 2020-12-10 04:22

We install an application (MSI) using MSIEXEC with the following command line option:

MsiExec.exe /x{code} /qn /liwearucmopvx+ C:\\Log\\UnInstall.tra
MsiExec         


        
3条回答
  •  無奈伤痛
    2020-12-10 04:54

    Check out the MSDN Documentation on the Upgrade Table, basically you need to set the msidbUpgradeAttributesVersionMaxInclusive bit.

    You don't state what you're using to build your installer, if you're using WiX 3.5 or later you can use MajorUpgrade/@AllowSameVersionUpgrades="yes" to take care of this for you.

    Note that because MSI ignores the fourth product version field, setting this attribute to yes also allows downgrades when the first three product version fields are identical. For example, product version 1.0.0.1 will "upgrade" 1.0.0.2998 because they're seen as the same version (1.0.0). That could reintroduce serious bugs so the safest choice is to change the first three version fields and omit this attribute to get the default of no.

    Note that instead of having to remember the package code (a real pain if you're using auto-generated package codes with Continuous Integration) the following VBScript will remove the package by name by searching the list of installed products and finding the package code itself.

    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
    

提交回复
热议问题