[WiX] Actualizando una aplicación existente

Vamos a ver cómo preparar un instalador de WiX para soportar actualizaciones mayores. Aclaremos que actualizaciones mayores son actualizaciones completas, que no requieren de una versión anterior; mientras que las actualizaciones menores son parches que incluyen sólo parte de la funcionalidad, por lo que deben aplicarse sobre una instalación existente.

Aunque en mi introducción a WiX usé el atributo Product.UpgradeCode, este por sí mismo no tiene funcionalidad. Pero vamos a aclarar primero cómo usarlo y después veremos como hacer para que se tenga en cuenta. Según ya comentamos, su objetivo es identificar versiones anteriores del mismo producto, por lo que su valor debe conservarse en futuros instaladores. En cambio el Product.Id sí debe ser distinto en cada generación, de ahí que usemos ‘*’ para usar un nuevo Guid en cada caso. Pero si sólo con esto generamos dos instalaciones distintas y las instalamos en secuencia en un mismo puesto, veremos como en Agregar o quitar programas tenemos 2 productos con el mismo nombre.

Para evitarlo, debemos añadir dos nuevas etiquetas a nuestro elemento Product:

    <Upgrade Id="11111111-2222-3333-4444-555555555555">
      <UpgradeVersion Minimum="0.0.0" IncludeMinimum="yes"
                      Maximum="1.2.3" IncludeMaximum="no"
                      Property="PREVIOUSFOUND" OnlyDetect="no" />
    </Upgrade>
    <InstallExecuteSequence>
      <RemoveExistingProducts After="InstallInitialize"/>
    </InstallExecuteSequence>

La etiqueta Upgrade hace que se busquen versiones anteriores por su número de versión. Lo más sencillo es poner como Maximum la misma versión actual y excluirla con IncludeMaximum=”no”. Hay que destacar que es el atributo OnlyDetect=”no” el que da la orden de desinstalar las versiones anteriores, pero para ello requiere de la existencia de la etiqueta RemoveExistingProducts que vemos más abajo.

[Act 13:54] Y una cosa más que se me olvidaba y me parece importante: al comprobar versiones anteriores, sólo se comprueban las 3 primeras partes de la versión. Es decir, que si instalamos 1.0.0.0 y luego intentamos actualizar con 1.0.0.1, como las 3 primeras partes son iguales creerá que se trata de la misma versión. Esto he podido constatarlo personalmente y lo he corroborado con otras opiniones, pero no he encontrado documentación oficial al respecto en WiX ni en Windows Installer. Pero como el número de revisión (4º número de la versión) sólo suele diferenciar versiones del mismo día, su repercusión práctica significa que si queremos actualizar una versión por otra lanzada después el mismo día, tendremos que desinstalar la primera manualmente. Pienso que es difícil que tenga repercusión en nuestros clientes, o en todo caso de forma muy puntual.

Para profundizar en la actualización de versiones anteriores y descubrir más opciones, el manual de WiX: How to implement a major upgrade in your installer.

Anuncios
Esta entrada fue publicada en Setup y etiquetada , , , , , . Guarda el enlace permanente.

Una respuesta a [WiX] Actualizando una aplicación existente

  1. Pingback: [WiX] Incluyendo ventanas en un instalador | XAML Sorpresa

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s