2010-10-19 100 views
12

Nos instalar una aplicación (MSI) usando MSIEXEC con la siguiente opción de línea de comandos:MSI instalación falla porque "Otra versión de este producto ya está instalada"

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 

mayoría de las veces esto funciona, pero a veces la la desinstalación falla (aún no estoy seguro de por qué, investigando el error). De todos modos, cuando esto sucede me sale el siguiente error durante la reinstalación:

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 

¿Hay alguna manera de eludir esto? Lo que significa que siempre volvemos a instalar (si existe, podemos simplemente eliminarlo automáticamente)

+0

¿Está usted haciendo el programa MsiExec? O esta pregunta pertenece a otra parte ;-) –

+0

¿No estás seguro de lo que quieres decir con "hacer que sea un programa"? – Shaitan00

+0

stackoverflow como el nombre (tal vez) implica es un sitio de programador, AFAIK. –

Respuesta

0

Si la desinstalación falla, el producto seguirá registrado en el sistema: dependiendo de dónde ocurra la falla, la desinstalación se revertirá , dejando el producto aún instalado.

Si intenta reinstalar un producto con el mismo código de producto pero con una versión diferente de una instalación existente, MSI se quejará, con razón, de que el producto aún está instalado. Si desea lograr un comportamiento de actualización, debe cambiar el código del producto y escribir las entradas en la tabla de actualización para que MSI pueda discriminar entre los productos antiguos y nuevos y usar la acción RemoveExistingProducts para eliminar el producto anterior antes o después de que la versión más nueva acostado.

Si desea entender por qué falló la desinstalación, debe consultar los registros, normalmente buscar 'return value 3', que es la firma de una acción de instalación fallida.

8

Eche un vistazo al MSDN Documentation on the Upgrade Table, básicamente necesita establecer el bit msidbUpgradeAttributesVersionMaxInclusive.

No indica lo que está utilizando para construir su instalador, si está usando WiX 3.5 o posterior, puede usar MajorUpgrade/@AllowSameVersionUpgrades="yes" para encargarse de esto.

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.

Tenga en cuenta que en lugar de tener que recordar el código de paquete (un verdadero dolor de cabeza si usted está utilizando los códigos de paquetes generados automáticamente con la integración continua) la siguiente VBScript se eliminará el paquete por el nombre de mediante la búsqueda en la lista de productos instalados y encontrar el código del paquete en sí.

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 
+0

Esta configuración hizo que mi el instalador de prueba puede arreglarse solo para poder desinstalarlo con éxito. –

0

La pregunta es bastante viejo, pero las respuestas existentes están perdiendo la esencia del problema y la solución mientras que es útil para otros escenarios:

  1. Si falla la desinstalación, usted tiene un problema serio , y no hay mejor manera que analizar esto: ; de lo contrario, podría tener más problemas más adelante.

  2. Al menos, escribiría un pequeño script/programa, que utiliza el valor de retorno de la desinstalación o, incluso más potente, las pruebas, si el MSI todavía está instalado, ANTES de que intente instalar el nuevo MSI.
    Daría más información sobre cómo hacerlo, si hay interés en esto, pero ya hay información sobre SO en otras preguntas.

  3. Algunas otras recomendaciones recomiendan, que debe usar Actualizaciones principales (cada nueva compilación puede/debe ser una Mejora mayor correcta en este escenario, al menos como recomendación). Esta es una buena recomendación, pero no ayuda, si las desinstalaciones fallan "a veces". Además, es importante indicar que, con mayor frecuencia, el error que menciona, muestra que ya no está utilizando Actualizaciones principales. Si realmente tiene un problema con las desinstalaciones, una actualización importante podría aumentar los problemas, porque dependiendo de la configuración, puede instalar el producto por segunda vez en MSI y tiene dos referencias MSI sobre esto, lo que todavía es un producto para ti. Más detalles llevarían demasiado lejos. Solo recuerde, una desinstalación (siempre) en funcionamiento o al menos una prueba de esto debe asegurarse antes de seguir con los pasos de actualización.

  4. El script de saschabeaumont es realmente corto y agradable. Lo que está haciendo es asegurar que realmente está usando el Código de producto correcto. La necesidad principal es, porque tiene que cambiar cada vez, producir una importante actualización ... En su caso: Esto resuelve solamente un escenario, por qué su desinstalación podría haber fallado ...

Cuestiones relacionadas