NSIS: Instalador de aplicaciones en Windows

Hace unas semanas necesité desplegar un programa entre las estaciones de trabajo Windows de una red, en un entorno hostil: Sin dominio y en consecuencia sin políticas, sin script de logon en las estaciones, sin saber el nivel de conocimientos del usuario, sin saber si el usuario sería administrador local con permisos para poder instalar ... sin nada: Mis probabilidades de éxito eran muuuy escasas. A pesar de ello, me las apañé para solucionar el inconveniente de no tener un punto de entrada común y centralizado, con ayuda de Squid en modo transparente, bloqueando el acceso a Internet a aquellas estaciones que no hubieran ejecutado el programa que me interesaba tuvieran instalado. Así, el problema se reducía a tener en éxito en la instalación de ese programa.

Este programa debía modificar claves del registro de Windows en HKLM, instalar a su vez otro programa con ciertos argumentos y copiar algunos archivos a determinados directorios. Necesitaba tener permisos como Administrador, para poder hacerlo.

En otro tiempo y etapa de mi vida administré servidores Windows. Recuerdo que por aquel entonces usábamos editores de ficheros .MSI para distribuir aplicaciones y configuraciones. Aquello siempre fue un infierno: sólo funcionaban bien los .MSI de Microsoft, y si se quería hacer algo que medio funcionara lo mejor era ver en los foros de Windows, cómo la gente distribuía y empaquetaba la aplicación que estaba intentando preparar. Tengo un recuerdo malo de mi experiencia con .MSI, y quizás no hubiera podido hacer lo que yo necesitaba hacer en esta ocasión. También recuerdo que usaba una herramienta llamada InstallRite, que era capaz de realizar SnapShots antes y después de una instalación, y generar un ejecutable .EXE con los cambios. Aquella herramienta funcionaba muy bien con Windows 9X, pero con XP se colgaba muy a menudo, y había que dedicar mucho tiempo a la edición de los cambios, para evitar distribuir la renovación de IP en el DHCP y, otras cosas que ocurrían en el sistema mientras se instalaba la aplicación, y que por supuesto las diferencias entre los Snapshots capturaban. También llegué a usar las herramientas de distribución de software que traen los IDEs de desarrollo como Delphi o VisualBasic, pero al final requerían tener determinadas DLLs instaladas en el sistema, y aquello terminaba convirtiéndose en el pez que se muerde la cola :(.

Para este proyecto volví a repasar las soluciones que tenía disponibles y encontré NSIS: NSIS viene de Nullsoft Scriptable Install System (¿recordais la instalación de WinAmp?) y es una herramienta OpenSource para crear instaladores de aplicaciones mediante scripts, con un lenguaje de programación propio. Es lo que necesitaba, y con ella tuve éxito en mi labor. Destacaría de ella:

  1. Usa un script para describir la secuencia de pasos que debe seguir el proceso de instalación, con un lenguaje propio a caballo entre un Basic primitivo, las macros del preprocesador de C, y ensamblador. Esto es una ventaja, porque podemos reutilizar nuestra experiencia y los scripts de instalación, además de que podemos establecer una lógica en el proceso de instalación: Si el tiene tal cosa en el registro haz tal otra, si no es administrador haz tal cosa, etc
  2. Existe una comunidad muy amplia de usuarios, que suben sus scripts y te pueden inspirar en tu labor. Hay muchas referencias en Google, y casi seguro encontrarás ayuda para lo que quieras hacer.
  3. Permite la inclusión plugins para ampliar funcionalidades, una de ellas es la RunAS (como el sudo de Linux, pero para Windows).
  4. Permite personalizar completamente toda la interfaz de usuario durante el proceso de instalación.
Es una gran y robusta herramienta a tener en cuenta: Yo tardé dos tardes escasas de no tener nada y conocer la herramienta, a tener mi problema resuelto con su correspondiente instalador.

Si quereis empezar con ella, echarle un vistazo a estos dos tutoriales: Adictos al trabajo: Realizar Instaladores de forma sencilla con NSIS 2.0 y Crear instalaciones con NSIS

No hay comentarios: