Instaladores en Windows y qué diferencia existe entre un instalador .exe y uno .msi

21/09/2018
Artículo original

En Windows existen fundamentalmente dos maneras de instalar un programa en el sistema: descargándose un archivo ejecutable (.exe) que es un programa de instalación específico, o bien descargándose un archivo .msi. Estos últimos se ofrecen en muchos casos para "instalaciones empresariales", pero no parece haber gran diferencia entre estos y los anteriores. Realmente ¿las hay? ¿Cuál nos conviene más? ¿Qué programas podemos utilizar para crear un paquete de instalación para nuestras aplicaciones?

Los archivos MSI toman su nombre (y extensión) de la tecnología lanzada en 1999 e inicialmente denominada Microsoft Installer (nombre en código "Darwin"), y que actualmente se llama Windows Installer. Windows Installer es tanto un servicio que viene instalado de serie con todas las versiones de Windows, como una API de Windows que se puede utilizar para crear instalaciones, mantenimiento, reparación y desinstalación de software. Los archivos .msi no son más que bases de datos pseudo-relacionales que contienen toda la información necesaria para realizar una instalación y sus tareas relacionadas (reparación, cambios en lo instalado o desinstalación) por parte de Windows Installer.

La gran ventaja de utilizar un archivo .msi para realizar una instalación es que no se necesita ningún software especial: basta con hacer doble-clic sobre el archivo .msi y Windows Installer se encarga de todo: muestra una interfaz de instalación, instala el software, registra componentes, genera una secuencia de desinstalación, etc... Lo cual es muy cómodo para el desarrollador. Además, en muchas ocasiones los sistemas especialmente seguros, como los servidores, no permiten la ejecución de cualquier ejecutable, por lo que un archivo .msi se convierte en una gran opción puesto que no ejecuta nada: solo llama al servicio de instalación del propio sistema, que se encarga de todo lo demás.

Por otro lado los archivos de instalación ejecutables, los que llevan la extensión .exe, pueden ser en realidad de dos tipos:

  • Los de tipo "lanzador" (bootstrapper en inglés), que en realidad son archivos comprimidos que llevan dentro un .msi el cual, tras haberlo descomprimido, llaman a Windows Installer para que se encargue de todo el proceso. Son una especie de MSI "furtivo" que se entrega en forma de ejecutable por comodidad (ocupan menos generalmente).
  • Los personalizados o no-MSI: son ejecutables que se encargan de todo el proceso de instalación, no utilizando para nada por debajo el servicio de MSI. Existen muchos productos para crear instalaciones de este tipo, que utilizan sus propios sistemas. Son programas normales y corrientes de Windows, con la particularidad de que se usan una única vez y para instalar otros programas.

Una ventaja de los ejecutable frente a los MSI es que es posible instalar varias aplicaciones en paralelo. MSI solo es capaz de encargarse de una instalación de cada vez, por lo que mientras una está en curso no podemos instalar o desinstalar nada más que use MSI. Este es el motivo por el que muchas veces, mientras desinstalamos un programa, si le damos a desinstalar a otro de la lista no se nos permite. Lo bueno de usar MSI, es que, al mismo tiempo que se realiza la instalación de un producto, se crea de manera automática un punto de restauración del sistema, para poder volver al mismo estado exactamente si todo falla En instaladores ejecutables esto no siempre es así.

Finalmente, otra gran ventaja de los MSI es que, si lo deseamos, se pueden instalar de manera desatendida. Es decir, se pueden lanzar sin diálogos de ninguna clase, ni preguntas al usuario, de modo que todo el proceso se puede realizar de manera silenciosa (instalación silenciosa). Esto es especialmente útil en instalaciones en entornos corporativos en donde los administradores de sistemas necesitan poder instalar mucho software en poco tiempo e incluso de manera remota (mediante políticas se Directorio Activo o scripts de inicio de sesión). Este es uno de los motivos por los que los MSI son muy populares en entornos empresariales.

Programas de creación de instalaciones

Existen multitud de programas que sirven para crear instalaciones de software en Windows. Algunos de ellos te ayudan con la creación de paquetes MSI y otros usan su propio sistema de instalación, como hemos visto. Incluso los hay que pueden trabajar de ambas maneras.

Estas son algunas de las opciones más conocidas para crear programas de instalación:

  • WiX Toolset: lanzado ya hace 14 años (en 2004) se ha convertido en la opción preferida por Microsoft. Se trata de un proyecto de código abierto (de hecho el primero que lanzó Microsoft con Common Public License) y por supuesto gratuito. Permite crear paquetes .msi a partir de archivos XML con información del proyecto, y dispone de interfaz de línea de comando (para automatizar el proceso) e integración con Visual Studio (aunque no muy visual que digamos). De hecho, tiene una curva de aprendizaje bastante pronunciada.
  • Visual Studio 2017 Installer Projects: se trata de una extensión oficial de Microsoft que añade a Visual Studio 2017 la capacidad de generar paquetes de instalación MSI desde el propio entorno. Esta funcionalidad se entregaba de serie hasta Visual Studio 2015 (incluido), pero en VS2017 se quitó en favor de WiX. Sin embargo, a mucha gente le gustaba esta opción que tenía una interfaz muy sencilla de usar, y mucha otra gente disponía de proyectos que la utilizaban y querían seguir usándola, por lo que Microsoft lanzó este complemento para VS que restauraba la funcionalidad. Tiene más de 2 millones de descargas desde el marketplace. Es completamente gratuito y fácil de utilizar.

  • Orca.exe: se trata de una herramienta de línea de comandos gratuita que entrega Microsoft con el SDK de Windows. Permite crear y editar paquetes MSI, pero es durilla de utilizar al carecer de interfaz gráfica. Sin embargo, puede resultar útil para automatizar ciertas tareas de creación de paquetes de instalación.
  • IExpress.exe: este ejecutable viene incluido con Windows desde los tiempos de Windows 2000. Permite crear paquetes de instalación sencillos a partir de los contenidos de cualquier carpeta, pudiendo sacar una licencia primero, ejecutando o no algo tras la descompresión, y algunas opciones más para conseguir un ejecutable de instalación final. Es algo sencillo pero muy efectivo y no tienes que hacer nada para conseguirlo: ya lo tienes en Windows. Aquí te dejo unas instrucciones básicas de uso de IExpress.
  • Installshield de Flexera: uno de los más conocidos y utilizados del mundo ya que viene incluido con Visual Studio en una versión limitada. No es nada barato si quieres la versión comercial (ninguno de los comerciales lo es).

  • InnoSetup: uno muy conocido y utilizado ya que es gratuito y Open Source. Creado en 1997 ha ido añadiendo capacidades con los años hasta superar en muchos casos las capacidades de muchos programas comerciales que son bastante caros. Genera instaladores ejecutables autónomos. Merece la pena echarle un vistazo.

  • Nullsoft Scriptable Install System: súper-conocido y muy utilizado porque es de código abierto y gratuito, creado por la misma gente que creó en su día el reproductor de música WinAmp (que si tienes unos cuantos años seguro que recuerdas). Su uso se basa en scripts y genera ejecutables de instalación propios. Es muy rápido (está escrito en C++) y muy ligero (solo añade 34KB de carga extra al paquete final). Lo utilizan grandes empresas para distribuir su software, como Google, Dropbxox, Amazon o McAfee.
  • EMCO Package Builder: un editor de instalaciones que permite definir paquetes MSI e incluso convertir programas ejecutables en MSIs silenciosos para instalación remota desatendida. Su mayor diferenciación es la interfaz de usuario avanzada que ofrece, que permite simplificar mucho la creación de los paquetes de instalación. Lo puedes probar gratis. Cuesta unos $500.

Microsoft tiene una página en la que compara los proyectos de instalación de Visual Studio, Wix y la versión limitada de Installshield para ayudarte a decidirte por uno o por otro.

¡Espero que te resulte útil!