Primeros pasos con WiX

Dicen que los blogs están llenos de artículos introductorios a todo tipo de tecnologías, pero que los artículos avanzados son un rara avis. Bueno, pues aquí estoy yo para aportar mi granito de arena con otro artículo introductorio. Se trata de una herramienta para la generación de instaladores (o sea, setup, msi…) que ha llegado a mis oídos gracias a El Bruno junto con el anuncio de que la siguiente versión de Microsoft Visual Studio no soportará los proyectos Setup. Aunque sabemos que existen herramientas muy avanzadas como InstallShield para generarlos, me gusta el enfoque de WiX por su sencillez y por la facilidad con que puede integrarse en entornos de integración continua. Casualmente, hace unos días había instalado VS2010 en mi servidor de builds para generar esos setups, algo que con WiX ya no será necesario como vamos a ver.

Como podemos ver en su página de Codeplex, WiX es una herramienta de línea de comandos que genera un instalador según una definición contenida en un archivo XML. Permite características avanzadas como la generación de msp (parches) o la inclusión de acciones personalizadas. Esto unido a la existencia de un plugin para Visual Studio (que aún no he probado) lo hacen una herramienta muy interesante.

Definición wxs

Para generar un instalador, necesitamos una definición en formato XML, en un archivo con extensión .wxs cuyo esquema ofrece muchas posibilidades. A continuación vamos a generar un instalador simple para familiarizarnos con la estructura de estos archivos, y vamos a comentar sus partes más significativas:

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="*" Name="Pica para Motorwin 3 Taller"
           UpgradeCode="11111111-2222-3333-4444-555555555555"
           Version="3.0.4119" Manufacturer="Nibisoft" Language="1034">
    <Package InstallerVersion="200" Compressed="yes"/>
    <Media Id="1" EmbedCab="yes" Cabinet="Pi3a.cab"/>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder" Name="PFiles">
        <Directory Id="ManufacturerDir" Name="Nibisoft">
          <Directory Id="AppDir" Name="Pica para Motorwin 3 Taller">
            <Component Id="Core" 
                       Guid="11111111-2222-3333-4444-555555555555">
              <File Name="mw3tpica.exe" DiskId="1"
		    Source="..\Pica\mw3tpica.exe"/>
            </Component>
          </Directory>
        </Directory>
      </Directory>
    </Directory>
    <Feature Id="DefaultFeature" Level="1">
      <ComponentRef Id="Core"/>
    </Feature>
  </Product>
</Wix>

Podemos guardar este archivo (en mi caso con el nombre PicaSetup.wxs). Hay mucha información en él, pero si tenemos un cierto conocimiento previo sobre instaladores y sobre el formato Windows Installer veremos como todos los conceptos ya nos resultan familiares.

La estructura de nuestro archivo es la siguiente:

  • <Wix>: raíz del archivo.
    • <Product>: el único producto. Representa nuestro instalador.
      • <Package>: un paquete comprimido.
      • <Media>: un único soporte. Esta etiqueta permitiría dividir la instalación en varios discos, algo poco frecuente hoy en día
      • <Directory>: la estructura de archivos donde instalar.
        • <Component>: un componente de la instalación.
          • <File>: archivos del componente
      • <Feature>: configuraciones disponibles para instalar (como Típica, Personalizada…) En este caso, sólo una.

Habitualmente el elemento Component se indica por separado, y se referencia con ComponentRef, pero en casos sencillos como este puede anidarse dentro del Directory donde se instalará. Los componentes son las partes que componen la aplicación y que el usuario puede elegir si instalar o no (directamente o seleccionando una Feature u otra).

Los datos de los elementos se especifican como atributos. Los más importantes son:

  • Product.Name: nombre de la aplicación.
  • Product.Manufacturer: fabricante de la aplicación.
  • Product.Id y Product.UpgradeCode: identificadores para detectar instalaciones anteriores. Baste decir que el UpgradeCode debe ser inmutable mientras que se genera un Id (equivale a ProductCode) en cada generación.
  • Product.Version: esta versión se mostrará en Agregar y quitar programas.
  • Product.Language: idioma de la instalación. Español (de España): 1034. Inglés americano: 1033.
  • Directory.Name: nombre del directorio a crear. En nuestro ejemplo, creamos en ProgramFilesFolder una carpeta con el nombre del fabricante, y dentro otra con el nombre del producto.
  • File.Name: nombre destino del archivo.
  • File.Source: fuente de donde obtener el archivo al generar el instalador. En nuestro caso está en otra carpeta, basta con indicar su ruta relativa.

Herramientas de generación: candle y light

Una vez tenemos la definición, podemos generar el instalador. Para eso necesitamos ejecutar dos comandos que encontraremos en la carpeta de instalación de WiX (normalmente C:\Program Files\Windows Installer XML v3.5\bin). Para lanzarlos, podemos abrir una línea de comandos y navegar a la carpeta de la definición wxs:

candle PicaSetup.wxs

light PicaSetup.wixobj

El comando candle genera un fichero .wixobj intermedio que es consumido por el segundo comando light para generar el definitivo fichero .msi que ya podemos probar.

Conclusión

Hemos planteado el caso más sencillo de cómo generar un instalador con WiX a partir de su definición. Y usando la línea de comandos, por lo que desde ya sabemos también cómo incluir esta generación dentro de un entorno de integración continua.

El formato de archivo de WiX soporta muchas más características y funcionalidades que las que hemos visto en este artículo. En próximas entregas veremos algunas otras de las posibilidades que nos ofrece WiX.

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

2 respuestas a Primeros pasos con WiX

  1. Pingback: [WiX] Actualizando una aplicación existente | XAML Sorpresa

  2. 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