2009-03-18 13 views
13

tengo una MSI construir utilizando la versión WiX 3.MSI no instala todos los archivos cuando se ejecuta RemovePreviousVersion

Todos los instaladores anteriores para el producto estamos desplegando funcionó bien con la configuración especificada (es decir: si existe versión anterior , elimine, luego instale la nueva versión); sin embargo, las nuevas MSI que compilamos no instalan todos los archivos cuando se ejecuta a través de la ruta 'eliminar primero'.

Si eliminamos manualmente la instalación existente y luego ejecutamos la nueva versión, todos los archivos están instalados, y cuando examino el archivo MSI en Orca, los archivos y las características se muestran y parecen estar bien.

Hemos intentado ejecutar con el registro detallado y adicional activado (/l*vx) sin embargo, todo lo que podemos ver si los archivos no se están & se han instalado.

¿Algún comentario o sugerencia? Esto nos está llevando por la pared.

+0

¿Alguno de los archivos de la instalación anterior está bloqueado o en uso? – RobS

+0

esto también debería etiquetarse como wix –

+0

@Rob Sanders: ninguno de los archivos está bloqueado (por lo que puedo ver). Antes de ejecutar la desinstalación, se inicia un proceso para eliminar la aplicación en ejecución. –

Respuesta

5

Bien, hablar bien con otra persona donde me ayudan a encontrar una solución al problema.

Agregamos la propiedad REINSTALLMODE y lo configuramos en amus. ¿Qué significa esto?

De manera predeterminada, la propiedad está configurada en omus, lo que significa: Reinstalar si el archivo falta o es más antiguo, reescribir el registro de la máquina y las colmenas del usuario, reinstalar accesos directos. Cambiar esto a amus básicamente dice: Reinstalar todos los archivos.

Por lo tanto, no estoy 100% seguro de cuál fue la causa. Sospecho que pueden haber bloqueos extraños o algo así, pero establecer en amus no tiene ningún efecto adverso, así que nos quedaremos con eso.

Gracias por las sugerencias.

(También, más detalles sobre esta propiedad se pueden encontrar aquí: MSDN: REINSTALLMODE Property

3

¿Cómo es tu paso <RemoveExistingProducts After="">? Podría ser que removeexisting se ejecute después de la instalación y elimine todos los archivos que eran iguales en las versiones anterior y actual.

Tengo mi instalador configurado en <RemoveExistingProducts After="InstallInitialize"> para asegurarme de que esté hecho antes que cualquier otra cosa. No sé si es correcto o no, pero parece funcionar.

<Upgrade Id="$(var.UpgradeCode)"> 
     <!--Upgrade code found at http://www.nichesoftware.co.nz/blog/200809/upgradable-msi-installations-with-wix --> 
     <!-- Detect any newer version of this product--> 
     <UpgradeVersion Minimum="$(var.version)" IncludeMinimum="no" OnlyDetect="yes" Language="1033" Property="NEWPRODUCTFOUND" /> 

     <!-- Detect and remove any older version of this product--> 
     <UpgradeVersion Maximum="$(var.version)" IncludeMaximum="yes" OnlyDetect="no" Language="1033" Property="OLDPRODUCTFOUND" /> 
    </Upgrade> 
    <CustomAction Id="PreventDowngrading" Error="Newer version already installed"></CustomAction> 
    <InstallExecuteSequence> 
     <!-- Prevent Downgrading--> 
     <Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom> 
     <RemoveExistingProducts After="InstallInitialize" /> 
    </InstallExecuteSequence> 
    <InstallUISequence> 
     <!-- Prevent Downgrading--> 
     <Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom> 
    </InstallUISequence> 
+0

Gracias por la entrada - El mío también está configurado en After = "InstallInitialize" - por lo que todavía estoy perdido por la causa de este problema: | –

+0

@ranomore: ¿La identificación del producto está establecida en *? – NileshChauhan

+0

sí, está establecido en *. –

18

Sobre la base de la secuencia de acción personalizado predeterminado, Windows Installer determina qué necesitan ser instalados/sobrescribe antes de quitar las versiones existentes de software de archivos de Windows. El instalador usa el valor de la propiedad REINSTALLMODE para indicarle cómo tomar decisiones sobre cuándo sobrescribir los archivos. Si REINSTALLMODE contiene una "o", solo instalará archivos cuya versión sea diferente o el archivo ya no exista; los archivos versionados solo se instalarán si la fecha modificada del archivo es < = la fecha de creación (es decir, el archivo no se modifica). Si REINSTALLMODE contiene una "a", siempre instalará el archivo, independientemente de o f cualquier información de versión o fecha adjunta a archivos existentes.

Lo que está sucediendo en su escenario más probable es el siguiente:

  1. instalador de Windows determina qué archivos se deben instalar.Decide que no es necesario instalar algunos archivos (posiblemente porque ya existen y son de la misma versión o versiones más nuevas que las del MSI).
  2. Se eliminó la versión anterior del software, incluidos los archivos que Windows Installer determinó que no era necesario instalar.
  3. El instalador de Windows instala los archivos para la nueva instalación, pero no instala los archivos que determinó que no necesitaban instalarse.

El resultado final es que falta un montón de archivos después de actualizar el software. La configuración de REINSTALLMODE = amus en lugar de omus probablemente solucione el problema, pero debe asegurarse de saber cómo esto afecta el resto de la instalación. Si hay archivos que no desea que se sobrescriban, deberá marcarlos como "Nunca sobrescribir".

+0

Gracias por la información adicional :) –

Cuestiones relacionadas