# Windows Installer

Windows Installer, previamente conocido como Microsoft Installer (MSI), es un motor para la instalación, mantenimiento y eliminación de programas en plataformas Microsoft Windows.
Los paquetes MSI se definen como instaladores de Microsoft, a saber, aquellos paquetes de software que contienen la información necesaria para automatizar su instalación, minimizando la intervención manual del usuario, ya que toda la información iría contenida en el propio archivo o fichero "msi".
La información de instalación, y a menudo los archivos mismos, son empaquetados en paquetes de instalación, bases de datos estructuradas como almacenamiento estructurado de archivos OLE (Structured Storage Files Object Linking and Embedding) y comúnmente conocido como "MSI files" por su extensión de archivo (comparar: .deb, RPM). Windows Installer es un avance significativo sobre su predecesor, Setup API. Dado que ofrece ciertas características nuevas como la interfaz gráfica de usuario, la generación automática de la secuencia de desinstalación y un poderoso despliegue de capacidades, Windows Installer representa una alternativa interesante para los instaladores independientes, permitiendo reemplazar las antiguas versiones de InstallShield y Wise.
Microsoft anima a terceras partes a usar Windows Installer como la base para entornos de instalación, de modo que sincronicen correctamente con otros instaladores y mantengan la base de datos interna de productos instalados consistente. Características importantes como rollback (deshacer, dar marcha atrás) y versioning (control de versiones) (ver DLL Hell) dependen de una consistencia interna de la base de datos para una operación fiable.

## Estructura lógica de los paquetes

Un paquete describe la instalación completa de un producto (Windows Installer no maneja dependencias entre productos) y está universalmente identificado por un GUID. Un producto está compuesto de componentes agrupados dentro de sus características.

### Componentes installer

Un componente es la mínima parte de un producto. Cada componente es tratado por Windows Installer como una unidad: el desarrollo de la instalación no puede, por ejemplo, usar una condición para especificar solamente una parte de un componente. Los componentes pueden contener archivos, grupos de archivos, directorios, componentes COM, claves del registro de Windows, accesos directos y otro tipo de datos. El usuario final no interactúa directamente con los componentes.
Los componentes están identificados globalmente por GUIDs, lo que permite que un mismo componente sea compartido entre varios del mismo paquete o de múltiples paquetes, idealmente a través del uso de la unión de módulos (aunque para trabajar correctamente, diferentes componentes no deberían compartir ningún sub-componente).

### Rutas maestras

Una ruta maestra (key path) es un archivo específico, clave de registro, o fuente de datos ODBC que el autor del paquete especifica como crítico para un componente dado. Como las rutas maestras más utilizadas son en forma de archivo, se suele utilizar el término fichero maestro (key file). Un componente puede contener, a lo sumo, una ruta maestra; si un componente no tiene establecida de manera explícita una ruta maestra, el directorio destino del componente es tomado como la ruta maestra. Cuando se ejecuta una aplicación basada en MSI, Windows Installer comprueba la existencia de estos ficheros críticos o claves de registro (es decir, las rutas maestras). Si existe un desajuste entre el estado actual del sistema y el valor especificado en el paquete MSI (por ejemplo, un fichero maestro desaparecido), entonces la característica asociada es reinstalada. Este proceso es también conocido como “auto-reparación”. Dos componentes no pueden utilizar la misma ruta maestra u otra.