2011-12-20 12 views
6

Estamos utilizando WiX 3.5 para crear un instalador para uno de nuestros productos. Para simplificar, nos ocupamos de las actualizaciones de versiones a través de una actualización importante, así:WiX - Conservación de la configuración del registro en la actualización principal

<MajorUpgrade AllowSameVersionUpgrades="yes" DowngradeErrorMessage="Laterversionfound" /> 

no estamos especificando el atributo de programación, lo que significa la acción RemoveExistingProducts debe ejecutar después de "InstallValidate" - lo que significa una desinstalación completa de la versión antigua tendrá lugar, antes de instalar la nueva versión.

Instalamos algunas configuraciones de registro HKLM, que el usuario debe configurar después de la instalación. Debido a que la actualización principal realiza una desinstalación completa seguida de una reinstalación, estamos perdiendo la configuración definida por el usuario en el registro. Idealmente, debemos ser capaces de mantener estas en todas las actualizaciones.

mi registro componentes clave tener este aspecto:

<Component Id="regserver" Guid="[guid]"> 
    <RegistryValue Root="HKLM" Key="Software\Our Company\Our Product" Name="Server" Value="" Type="string" KeyPath="yes" /> 
</Component> 

He tratado de establecer la propiedad NeverOverwrite de los componentes a "sí", pero esto tiene el efecto desafortunado de no crear las claves - presumiblemente porque comprueba si las claves existen antes de la desinstalación sucede (que obviamente lo hacen), luego se eliminan con la desinstalación, pero no se vuelven a crear.

También intenté configurar el atributo "RemoveFeatures" en el elemento MajorUpgrade para eliminar todo menos las claves de registro. Sin embargo, esto deja instaladas dos versiones del producto, ya que la función que contiene las claves de registro pertenece a la versión anterior.

Mi próximo paso es intentar programar la opción RemoveExistingProducts en un punto diferente, aunque estoy esperando un poco de dolor con algunas de nuestras acciones personalizadas.

Así que mi pregunta es, ¿hay alguna manera de lograr lo que necesitamos, sin cambiar dónde está programado RemoveExistingProducts?

+0

¿Puede cambiar el instalador original? De ser así, podría hacer que el componente de registro sea permanente, lo que significa que no se desinstalará. –

+0

¿Estoy en lo cierto al pensar que esto dejaría la configuración incluso si el producto se desinstala? Idealmente, preferiría una desinstalación completamente limpia para nuestros clientes –

Respuesta

9

Use RegistrySearch para cargar los valores actuales en propiedades y luego use [PROPERTY] en RegistryValue para escribir esos valores. Si no hay un producto anterior instalado, las propiedades mantendrán sus valores predeterminados.

+0

Perfecto - gracias Bob –

Cuestiones relacionadas