2010-07-20 18 views
10

Tengo un programa que se instala con un instalador de WiX.instalador de WiX eliminar archivos en la desinstalación, pero no en la actualización

El programa en sí crea una cantidad de archivos en el directorio [CommonAppDataFolder] \ [MyAppName] \. Todos estos archivos tienen la misma extensión (vamos a llamarlo .dat).

En actualizando, quiero conservar estos archivos.
En desinstalando, quiero eliminar estos archivos.

Actualmente estoy borrando los archivos como tan:

<Directory Id='CommonAppDataFolder'> 
    <Directory Id='MyCommonAppDataFolder' Name='MyAppName'> 
    <Component Id='RemoveFilesComponent' Guid='71cb0cd8-8459-4a8f-89b7-f00977aa7b70'> 
     <RemoveFile Id='RemoveFiles' Name='*.dat' On='uninstall'/> 
    </Component> 
    </Directory> 
</Directory> 

y tengo esta para facilitar las actualizaciones:

<InstallExecuteSequence> 
    <RemoveExistingProducts After='InstallInitialize'/> 
</InstallExecuteSequence> 

Ahora, cuando se desinstala, los archivos .dat se eliminan correctamente.
Sin embargo, cuando actualizo, los archivos .dat también se eliminan. Supongo que porque una actualización está realizando una desinstalación en la versión anterior.

¿Me estoy acercando a este problema correctamente? ¿Cómo puedo conservar los archivos en la actualización, mientras los elimino en la desinstalación?

+0

¿Alguna vez encontró una solución a este problema. – darbid

+0

Hace mucho tiempo, pero no que yo recuerde. Creo que terminé simplemente dejando los archivos en el CommonAppDataFolder después de una desinstalación. – MatthewKing

+0

Gracias Matt por responder. – darbid

Respuesta

1

Una opción sería cambiar a una actualización menor. Eso tiene muchas restricciones, así que no es tan fácil como parece.

+1

Su respuesta puede ser antes o en las primeras etapas de wix burn, así que me pregunto si podría o podría responder esta pregunta de otra manera. Es una posible solución para crear un bootstrapper wix con paquetes de 2 msi. Sus archivos .dat estarían en el segundo paquete de msi y no se actualizarían. – darbid

+0

Se podrían hacer muchas cosas si el paquete original se envía de manera diferente. Respondí asumiendo que necesitaba tratar con lo enviado. –

+0

@RobMensching ¿hay alguna respuesta a los paquetes no enviados? (actualmente en desarrollo) Sería muy útil. ¡Gracias! – Eli

2

¿Ha intentado agregar una condición a RemoveExistingProducts? Esto es lo que haría.

<RemoveExistingProducts After='InstallInitialize'>(NOT UPGRADINGPRODUCTCODE) AND (Installed)</RemoveExistingProducts> 
+1

Esto parece lo que quiero, pero por supuesto significa que la versión anterior no se elimina al actualizar. Por ejemplo, termino con varias entradas para mi aplicación en el panel de control "Agregar o quitar programas". Cualquier solución? – MatthewKing

+1

Puede intentar eliminar el producto existente en After InstallFinalize. Esto eliminaría los archivos modificados y la configuración del registro, pero conservaría lo que no. IT también podría tener que ver con su ProductID o versión. El sistema operativo probablemente piense que es un programa diferente por completo. –

Cuestiones relacionadas