Realizar Instaladores con NSIS 2.0

Realizar Instaladores de forma sencilla con NSIS 2.0 (Nullsoft Scriptable Install System 2.0)

    Actualmente, todos los paquetes software que usamos vienen con un instalador.  El instalador es el encargado de copiar/actualizar ficheros, escribir claves en el registro, generar una configuración personalizada, crear accesos directos etc…  Todo esto se hace de manera automática para el usuario.  Ante el usuario el instalador se le muestra como un wizard durante el cual va seleccionando las opciones apropiadas y espera hasta que el instalador termina.  Una vez que el instalador ha terminado el usuario puede ejecutar nuestra aplicación.

NSIS  es una herramienta Open Source que permite a los desarrolladores crear dichos instaladores.  NSIS mediante un sencillo lenguaje de script nos permite realizar simples instaladores que muestran al usuario una sucesión de pantallas con diferentes opciones así como  otras tareas como generar claves en el registro o generar accesos directos a nuestra aplicación.

NSIS compila estos scripts dentro de un fichero ejecutable, de forma que nuestra aplicación pueda ser distribuida fácilmente. NSIS únicamente añade 34Kb de código de instalador (en la configuración por defecto).  Esto unido a que los ficheros de la aplicación son comprimidos según el algoritmo que indique el script o bien el compilador, hace posible que podamos crear instaladores de reducido tamaño.

Y lo mejor de todo es que NSIS 2.0  es una herramienta gratuita.

Instalación

El Nullsoft Scriptable Install System se encuentra como proyecto en http://sourceforge.net/projects/nsis

 

Desde cualquiera de sus mirrors podemos descargar la nueva versión 2.0.

Una vez instalado tendremos el compilador dispuesto para generar instaladores a partir de nuestros ficheros de script .nsi.

 

Ficheros de Script de NSIS

Para crear un instalador primero debemos escribir un script NSIS. Un script NSIS no es más que un fichero de texto plano con una sintaxis especial.  Para trabajar con estos scipts un buen editor es gVim, la versión para win32/X-window del clásico vi. Como podemos observar reconoce la sintaxis de los ficheros .nsi y nos la muestra con diferentes colores,  lo cual es sin duda de gran ayuda:

Los scripts NSIS son scripts de tipo batch (por lotes) en los que cada línea es tratada como un comando.  Si nuestra línea es demasiado larga podemos usar el bach-slash ‘ \ ‘ al final de la línea para continuar.  El compilador tratará la siguiente línea como continuación de la anterior, como por ejemplo:

MessageBox MB_YESNO|MB_ICONQUESTION \
    “¿Quiere borrar todos los ficheros de este directorio? \
    (Si creó algo que quiera mantener, click No
    IDNO NoRemoveLabel
 

Lenguaje de Script

La extensión por defecto de los scripts es .nsi.  También existen ficheros header ( al estilo de los .h de C/C++) que tienen la extensión .nsh.

Un script NSIS puede contener atributos del instalador, páginas, secciones y funciones.

Atributos del Instalador:


    Los atributos del instalador determinan el comportamiento y el look and fell de nuestro instalador.  Con estos atributos podemos cambiar los mensajes que se mostrarán durante la instalación.

Por ejemplo Name es el atributo correspondiente al nombre de nuestra aplicación, InstallDir será el directorio elegido para instalar la aplicación etc.

Páginas:

Un instalador puede mostrar diferentes páginas al usuario, como por ejemplo la página bienvenida, la de aceptación de licencia , la de selección del directorio de instalación etc..:

En caso de usar el UI moderno al incluir:  !include “MUI.nsh” usaremos sus macros:

 ;Mostramos la página de bienvenida
!insertmacro MUI_PAGE_WELCOME
;Página donde mostramos el contrato de licencia
!insertmacro MUI_PAGE_LICENSE “licencia.txt”
;página donde se muestran las distintas secciones definidas
!insertmacro MUI_PAGE_COMPONENTS
;página donde se selecciona el directorio donde instalar nuestra aplicacion
!insertmacro MUI_PAGE_DIRECTORY
;página de instalación de ficheros
!insertmacro MUI_PAGE_INSTFILES
;página final
!insertmacro MUI_PAGE_FINISH
 

Secciones:

    En un instalador pueden hacerse categorías de instalación.  Y así separar la instalación en varios componentes, dando a elegir al usuario cuales instalar y cuales no.

Dentro de cada sección usamos instrucciones que son ejecutadas en tiempo de ejecución.  Estas instrucciones, leen y escriben en el registro, crean, borran y copian ficheros y directorios, crean accesos directos etc.

Los desinstaladotes también pueden tener varias secciones teniendo como prefijo “un.”:

Funciones

Las Funciones contienen código semejante a las secciones , pero se diferencian de éstas en el modo en que se llaman. Hay dos tipos de funciones, las definidas por el usuario, que se llaman con la instrucción Call y las que se activan cuando ocurren determinados eventos en la instalación:

Abort es una función especial que hace que el instalador termine inmediatamente.

 

Variables:

En este lenguaje se declaran las variables mediante Var :

Estos son a grandes rasgos los componentes del lenguaje de script de NSIS, con el paquete se incluye un completo sistema de ayuda acerca del lenguaje, así como diferentes ejemplos:

Ejemplos proporcionados

Estas son las distintas apariencias posibles que puede tener nuestro instalador según los valores del script:

Este es el antiguo estilo de los instaladores.  Actualmente existe otro tipo de instaladores que visualmente se presentan así:

 

 

Estos dos últimos son aquellos scripts que usan las macros definidas en :

;Include Modern UI
!include “MUI.nsh”
 

Nuestro Ejemplo de Instalador

Basándonos en las especificaciones del lenguaje de script y en algunos ejemplos hemos construido nuestro propio instalador personalizado.

Para usar el estilo moderno de instalador incluimos el siguiente header: En este header se definen distintas macros que usaremos más adelante.

Dentro de nuestro script podemos especificar el algoritmo de compresión que queremos utilizar, este valor puede ser cambiado desde el compilador.

A continuación mostramos las distintas páginas de que constará nuestro instalador, al estar usando el nuevo estilo de instalador usamos unas macros especiales: La siguiente macro define el idioma de los mensajes por defecto que se mostrara al usuario:

Resultado visual de nuestro Instalador:

Una vez compilado nuestro instalador tenemos nuestro instalador dispuesto para ser distribuido y usado:

Finalmente comprobamos que nuestra aplicación aparece como instalada en Windows:

Y el desinstalador tiene este aspecto:

 

Tanto el instalador como el desinstalador en caso de tener activados los estilos visuales de XP tendrían ese look and feel.

Entorno de compilación

Finalmente para generar el fichero ejecutable del instalador nos bastará con pulsar el botón derecho sobre el script en el explorador de ficheros y seleccionar “Compile NSIS Script” :

O bien desde el propio MakeNSISW:

 

Desde donde en Tools>Settings podemos modificar el valor de variables definidas en el script:

Siempre y cuando no se definan dentro del script, ya que daría un error de doble definición.  Desde aquí también podremos especificar el algoritmo utilizado para la compresión de la aplicación o bien el que de el mejor resultado de todos ellos, sobrescribiendo así la elección del compresor presente en el script.

 

El script completo se puede bajar de aquí: nsi.nsi

 

 

De momento con esta herramienta únicamente podemos realizar instaladores para la plataforma Win32.

Si por ejemplo nuestra aplicación está escrita en Java y queremos realizar instaladores para diferentes plataformas existen otros proyectos:

http://www.izforge.com/izpack/

http://vainstall.sourceforge.net/

Ambos con licencia GNU General Public License (GPL).