Instaladores de aplicaciones en .NET
Fecha: 21/Ene/2004
Autor: J. M. Beas ([email protected])
PROGRAMAS DE INSTALACIÓN
Introducción
Una vez que una aplicación VB.NET ha sido desarrollada, comprobada y compilada, debe ser instalada en las máquinas cliente donde será utilizada en el futuro. En ese proceso el entorno .NET suministra una serie de métodos y herramientas para realizar programas instaladores dependiendo del tipo de aplicación creada y de las características de dicha máquina cliente.
El programa instalador debe ocuparse de cargar la aplicación en la máquina cliente así como cualquier otro archivo o recurso que ésta emplee en su funcionamiento, ya sea en el estado actual o en el futuro previsto.
Se distinguen tres tipos de instalaciones:
- instalación XCOPY
- programa instalador de aplicación
- programa instalador de módulo
Instalación XCOPY
Es el método más sencillo de instalación y no precisa el uso de ninguna herramienta de Visual Studio.NET por lo que constituye un método accesible a cualquier desarrollo. Se basa en el proceso de copia de la carpeta de la aplicación en la máquina cliente utilizando para ello el comando XCOPY de MSDOS disponible en cualquier sistema Windows. Para utilizarlo debe accederse a la línea de comandos desde Inicio Þ Todos los Programas Þ Accesorios Þ Símbolo del Sistema y la sintaxis a emplear es
XCOPY ruta_carpeta_origen ruta_carpeta_destino /s
donde /s indica que debe copiarse la carpetas y sus ficheros, pero también las de todas las subcarpetas independientemente del nivel de anidamiento. Por ejemplo, si la aplicación se encuentra en la carpeta c:\Calculadora y se debe tener en d:\Operaciones la sentencia es
XCOPY c:\calculadora d:\operaciones /s
Este proceso de copia migra todos los archivos necesarios, incluyendo el EXE generado y las DLL relacionadas a la carpeta destino pudiendo ser empleada. Si se desea instalar desde una máquina en otras máquinas de la red la única diferencia es que la ruta de la carpeta destino es la de una carpeta compartida en la máquina cliente y donde se han de tener permisos de escritura por parte del instalador.
Sin embargo, este método de instalación está sujeto a dos requisitos:
- la máquina cliente debe tener instalado .NET Framework ya que, en caso contrario, no puede disponer de las clases y otros recursos que la aplicación puede demandar
- las aplicaciones que se instalen de esta forma no pueden tener dependencias externas salvo el .NET Framework Esto implica que no puede hacer uso de archivos externos como pueden ser bases de datos o componentes compartidos.
Debido a las condiciones anteriores la instalación XCOPY sólo debe emplearse cuando la aplicación .NET no tiene dependencias externas y se puede suponer instalada en .NET Framework en todas las máquinas cliente lo cual reduce el número de aplicaciones que pueden instaladas de esta forma.
Programa instalador de aplicación
Cuando la aplicación no puede instalarse mediante XCOPY deben utilizarse las herramientas de Visual Studio para generar un programa de instalación específico, el cual emplee la aplicación Windows Installer para poder instalar la aplicación en cualquier máquina cliente de una forma sencilla. En ese sentido, se distingue la instalación de una aplicación independiente o de un control o componente desarrollado en VB.NET pero que no está orientado a existir ni a ser ejecutado de forma independiente sino cuyo objetivo es servir como paquete redistribuible para múltiples tipos de proyectos. Sin embargo, la herramienta a emplear en ambos casos es la misma y los pasos necesarios para ello son muy similares.
Para crear un proyecto del tipo indicado se emplea la herramienta de Visual Studio, Asistente de Proyecto Instalador empleando los siguientes pasos:
- tras abrir la solución que se desea instalar se accede a Archivo Þ Agregar Proyecto Þ Nuevo proyecto, mostrándose el cuadro de diálogo de creación de proyectos donde, en la lista Tipo de Proyecto se selecciona Proyectos de instalación e implementación y en la lista de Plantillas creadas para guiar al programador en la creación del proyecto se selecciona Asistente de Proyectos de Instalación
- Una vez iniciado el Asistente, nos indica que serán precisos cinco pasos para la creación del proyecto instalador
- El primer paso determina si el programa instalador se utilizará para una aplicación independiente (en cuyo caso distingue entre una aplicación Windows para ser empleada en máquinas cliente, o una aplicación web para ser empleada en Internet) o un paquete redistribuible que puede contener controles o componentes (en cuyo caso permite crear un módulo de Windows Installer o un archivo Cabinet CAB)
- Por tanto, para un programa instalador de aplicación Windows se selecciona la primera opción y se pulsa Siguiente
- El cuadro siguiente permite indicar qué elementos de la aplicación estarán en el programador instalador
Los elementos que ofrece para ser seleccionados son Resultado principal, Recursos adaptados, Símbolos de depuración, Archivos de contenido y Archivos de código fuente. El elemento principal es el primero porque es el que incluye el archivo ejecutable EXE de la aplicación y las DLL que emplea pero otros elementos, como por ejemplo el último que contiene el código fuente de la aplicación, no suele ser necesario en la instalación en las máquinas cliente.
- El siguiente paso permite añadir al instalador otros ficheros que no pertenecen directamente a la aplicación como pueden ser archivos de tipo Léame o páginas web HTML de ayuda de la aplicación. Sólo sería necesario pulsar el botón Agregar y localizarlos en el sistema de carpetas actual.
- El siguiente cuadro muestra un resumen con las opciones elegidas para el proyecto de instalación. Si alguna no fuera correcta se puede pulsar Atrás y modificarlas. Como se puede apreciar la ruta elegida es, por defecto, un carpeta con el nombre dado al proyecto de instalación dentro de la carpeta de la aplicación.
- Cuando se pulsa Finalizar se modifica el IDE para mostrar los elementos del programa instalador en una ficha nueva con el nombre de dicho programa
Además, también es visible en el Explorador de Soluciones una carpeta nueva con el nombre del proyecto de instalación y los elementos y dependencias pertenecientes a él.
- Como se puede apreciar, uno de los elementos del programa instalador son las dependencias detectadas que indican aquellos elementos considerados imprescindibles en la máquina cliente para el correcto funcionamiento de la aplicación final. Y como se puede ver el primero es siempre el propio .NET Framework.
- El resultado normal de un programa de instalación generado de esta forma es un solo fichero de extensión MSI porque supone que las máquinas cliente en las que será utilizado tienen instalado Windows Installer, una aplicación del sistema operativo que controla la instalación de aplicaciones. Por ejemplo, es la responsable de poder desinstalar aplicaciones en el equipo a través de la herramienta Agregar y quitar programas del Panel de Control.
- Sin embargo, la suposición anterior puede no ser cierta y otros hechos relacionados con la instalación puede necesitar tener más control sobre el resultado y características de los ficheros que constituyen el programa instalador. Para realizar esos cambios debe accederse a las características del programador instalador mediante la selección de la opción Propiedades en su menú contextual en el Explorador de soluciones.
- El primer paso es seleccionar Administrador de configuración y cambiar el valor Debug a Release para el proceso de instalación (Setup1)
- A partir de ese momento se dispone de las propiedades de la versión definitiva del programa instalador
Las principales opciones son
- Nombre del archivo de resultados: indica la localización y nombre del resultado del proyecto instalador en una sintaxis
<configuración>\<nombre_proyecto>.<extensión>
donde <configuración> indica la subcarpeta donde se creará el resultado final, <nombre_proyecto> será el del fichero de instalación y <extensión> será .msi para aplicaciones independientes o .msm para módulos instaladores, ambas dadas por el funcionamiento del Windows Installer.
- Empaquetar archivos: determina cómo se generan los ficheros finales en relación con el proyecto instalador. Son posibles tres opciones:
o En el archivo de instalación: es la opción por defecto e implica que todos los ficheros se incluyen en el archivo principal de instalación .msi. Es la opción en la que se aplica el mayor grado de compresión y la más sencilla porque se genera un único fichero a emplear en las máquinas cliente
o En archivos contenedores CAB: los ficheros Cabinet se emplean en múltiples instalaciones y pueden ser útiles por el hecho de poder elegir el tamaño máximo a emplear (ver cuadro superior). Si se fija en 1440 kb se podría guardar el resultado de la instalación en disquetes y emplear estos para llevar a cabo la instalación en las máquinas cliente
o Archivos separados sin comprimir: en esta opción no se aplica compresión y los archivos que constituyen el programa instalador se crean directamente en la misma carpeta que el fichero .msi.
- Programa previo (Bootstrapper): se emplea para determinar si el programa de instalación de nuestra aplicación debe encargarse también de instalar previamente en la máquina cliente la aplicación Windows Installer para que ésta controle el proceso de instalación posterior. Existen tres opciones:
o Ninguno: no se instalará Windows Installer por lo que se supone existente en las máquinas cliente. Si éstas tienen instalado Windows XP o superior es la opción adecuada ya que Windows Installer está presente en ellas.
o Programa previo para Windows Installer: esta opción añade Windows Installer al programa instalador. Cuando éste se inicie instalará primero en las máquinas cliente Windows Installer y luego retomará la instalación de la aplicación final. Esta elección conlleva la creación de cuatro ficheros en el programa instalador
Fichero
Significado
Setup.exe
Será el punto de entrada de la instalación Chequeará si es precisa la instalación de Windows Installer en la máquina cliente en cuyo caso recurre a InstMsiA.exe o a InstMsiW.exe para hacerlo. Después, reanuda la instalación del programa final desde el .msi.
InstMsiA.exe
Instala Windows Intaller en una máquina con Windows 95 o 98.
InstMsiW.exe
Instala Windows Intaller en una máquina con Windows NT o 2000.
Setup.ini
Contiene el nombre del fichero .msi que deberá ser ejecutado una vez se haya realizado la instalación de Windows Installer o se haya comprobado su existencia previa.
o Programa previo para web: se emplea cuando se debe disponer la instalación desde Internet. Se crean los ficheros InstMsiA.exe y InstMsiW.exe. También se crea Setup.exe para detectar la existencia previa de Windows Installer pero, en este caso, se descargaría el ejecutable de instalación desde la web, en cuyo caso deberá indicarse
§ la URL de la carpeta de instalación, donde debe estar el programa instalador y los ficheros asociados
§ la URL para instalar Windows Installer y donde, por tanto, deben estar InstMsiA.exe y InstMsiW.exe. Si no se indica deberá ser la misma que para el programa instalador
- Compresión: permite determinar el tipo de compresión a emplear (siempre que las opciones tomadas previamente lo permitan) en tres valores :
o Ninguna: no se aplica compresión
o Optimizada para velocidad: se aplica para generar una instalación rápida pero el tamaño del proyecto instalador puede incrementarse
o Optimizada para tamaño: se comprime al máximo reduciendo el tamaño de los ficheros de instalación pero el proceso de instalación será más lento.
Ejecución del programa instalador
Una vez generado el fichero .msi de instalación se puede hacer doble clic en él una vez que se encuentre en la máquina cliente. Se inicia un asistente que guía al usuario en el proceso de instalación de la aplicación. Los pasos principales son los siguientes:
- El primer paso presenta el Asistente e indica el nombre del proyecto de instalación seleccionado en su creación
- En el segundo paso el usuario debe seleccionar la carpeta del sistema local donde desea instalar la aplicación final. Puede aceptar la ruta que se ofrece por defecto o pulsar el botón Examinar para indicar otra distinta.
- El siguiente requisito es confirmar que se desea instalar la aplicación pulsando el botón Siguiente
- Si todo es correcto, el programa de setup procede a la instalación de la aplicación final, indicando con una barra de progreso el avance del proceso
- Para indicar en el último cuadro la finalización de la instalación.
Configuración de la instalación
La instalación que se consigue con los procesos y opciones descritos hasta la fecha es sencilla y eficiente porque consigue instalar en la máquina cliente la aplicación final. Normalmente se basa en la generación del fichero .EXE que permite lanzar la aplicación en dicha máquina. Sin embargo, no se ocupa del uso de la aplicación por parte del usuario de la aplicación final. Por ejemplo, no se crea acceso en el menú Programas, no se crea acceso en el Escritorio, elementos que pueden ser importantes para usuarios noveles o poco avanzados en el sistema operativo. Los siguientes apartados indican las opciones disponibles para configurar y potenciar el proceso de instalación.
Para configurar el proceso de instalación debe accederse en el Explorador de Soluciones a sus Propiedades en la Ventana de Propiedades:
Propiedad
Significado
AddRemoveProgramsIcon
Permite especificar un icono para el cuadro de diálogo de instalación en la máquina cliente
Autor
Contiene información sobre el autor del programa final
Description
Descripción de la aplicación
DetectNewerInstalledVersion
Verifica si existe una versión más reciente de la aplicación en la máquina cliente en cuyo caso detiene la instalación
Keywords
Claves de acceso asociadas a la aplicación
Localization
Suministra información local de la aplicación, es decir, características como país, idioma, etc.
Manufacturer
Información sobre la empresa que desarrolla la aplicación
ManufacturerURL
URL del fabricante
ProductCode
Código del programa. No debe ser alterado
ProductName
Nombre del Producto
RemovePreviousVersion
Verifica si existen versiones anteriores de la aplicación y las desinstala
Subject
Objetivo de la aplicación
SupportPhone
Teléfono de soporte técnico sobre la aplicación
SupportURL
URL de soporte técnico sobre la aplicación
Title
Título de la aplicación
UpgradeCode
Código de actualización. No debe ser alterado
Versión
Determina la versión que se desea instalar
Para configurar otras opciones relacionadas con el programa instalador debe accederse a los seis Editores de instalación a los que se accede en la opción Ver del menú contextual del programa instalador en el Explorador de Soluciones
- Sistema de archivos: determina la configuración de ficheros en la máquina cliente donde se instala la aplicación y puede crear carpetas o accesos directos. Está dividido en dos paneles
El panel izquierdo muestra la estructura de carpetas que se va a crear en la máquina cliente y muestra inicialmente tres: Carpeta de aplicación relativa al directorio donde se instale finalmente la aplicación, Escritorio del usuario y Menú Programas del usuario, al que él accede desde el menú Inicio. Por defecto los ficheros se guardan en la Carpeta de la Aplicación donde se pueden apreciar los elementos seleccionados
Si se desea localizarlos en otra carpeta de las creadas, se pueden arrastrar con el ratón al nuevo destino.
Si se desea tener otras carpetas se puede seleccionar la opción Agregar carpeta especial del menú contextual del panel izquierdo donde se accede a las carpetas más importantes donde puede ser necesario incluir algún fichero
Si se selecciona Carpeta personalizada, ésta se creará durante el proceso de instalación.
Si se añaden ficheros a este sistema de carpetas, estos se distribuirán con el programa instalador pero no se comprimirán ni se añadirán a los ficheros del instalador.
Una de los procesos más frecuentes es la creación de accesos directos a la aplicación que deben instalarse tanto en el Escritorio como en el menú Programas del usuario. Los pasos para crearlos son:
o En el Explorador de Soluciones y dentro del programa instalador se selecciona el elemento a buscar, en este caso, Resultado principal porque es el que hace referencia al programa ejecutable una vez instalada la aplicación final. Se accede a su menú contextual y se elige Buscar en el Editor con lo que el IDE accede directamente a la carpeta donde se encuentra dicho elemento
o Una vez localizado el elemento, se accede a la opción Crear Acceso Directo de su menú contextual
o Se debe seleccionar el nombre del Acceso Directo y luego copiarlo tanto a la carpeta Escritorio del Usuario como menú Programas para que dicho usuario pueda acceder a la aplicación final desde cualquiera de esas dos localizaciones.
- Registro: es una aplicación del sistema operativo Windows donde se registran, en forma de claves, ciertas operaciones y elementos como puede ser la instalación de programas, certificados, etc. El Editor permite tanto añadir entradas nuevas como modificar el valor de las entradas ya existentes.
- Tipos de archivo: se emplea para realizar una asociación entre un tipo de fichero, determinado por su extensión, y una aplicación que determinará la acción a tomar. Cuando en la máquina cliente se haga doble clic en el fichero se lanzará la aplicación seleccionada y se ejecutará el código dispuesto. Para crear una asociación en este Editor se accede a la opción Agregar Tipo de Archivo donde se mostrará esta disposición de elementos
En la ventana de Propiedades es donde debe configurarse la nueva asociación destacando las propiedades:
o Name: nombre del tipo de archivo. Se mostrará en el Explorador de Windows cuando existan en la máquina cliente
o Command: determina la aplicación que debe lanzarse cuando en la máquina cliente se intente abrir un fichero de los asociados. En la mayoría de los casos se deseará lanzar la aplicación que se desea instalar en la máquina cliente. Por ello si se accede la lista de valores, se muestra un cuadro para poder seleccionar el Resultado principal, es decir, el ejecutable
o Description: breve descripción del tipo de archivo que se mostrará en la máquina cliente cuando se sitúe el puntero sobre alguno de los archivos en el Explorador
o Extensions: extensión de los ficheros. Si son varias se pueden indicar separadas por comas
El resultado del ejemplo sería
En la parte inferior del esquema se muestra Open que es nombre por defecto de la acción que tendrá lugar, dentro de la aplicación lanzada, al abrir uno de los ficheros asociados (aunque ese nombre se puede modificar). Cuando se accede a sus propiedades se muestran
o Arguments: son los datos que la acción Open necesitará para realizar su función. Estos argumentos serán pasados al procedimiento Main de la aplicación VB.NET que deberá tenerlo como objeto inicial y realizar una llamada en su código a la función o procedimiento que deberá llamarse Open. El primer argumento que se pasa es siempre la ruta del fichero seleccionado.
o Verb: nombre de la función o procedimiento al que se llama en Sub para realizar la acción requerida.
Si en el ejemplo anterior se mantiene Open como Name y como Verb se elige Abrir, el Sub Main de la aplicación asociada al fichero debe ser similar al siguiente
Shared Sub Main(byval args() as string)
If args.length<>o then
Abrir(args(0))
Else
System.Application.Run(New Form1())
End if
End sub
donde se aprecia que, si la aplicación comienza por haber hecho doble clic en un fichero asociado, se llama al procedimiento Abrir pasándole como dato la ruta del fichero elegido. Si la aplicación es iniciada directamente se carga el formulario Form1. Debe advertirse que las aplicaciones .NET para Windows no tienen por defecto el procedimiento Sub Main y debe ser creado manualmente y dispuesto como objeto inicial.
- Interfaz de usuario: permite configurar las pantallas que el usuario ve en la máquina cliente durante el proceso de instalación al cual considera dividido en tres partes:
o Inicio: En ella se da la bienvenida y se pide al usuario que seleccione la carpeta donde desea instalar la aplicación final así como se le pide que confirme la instalación.
o Progreso: se indica mediante una barra de progreso el avance de copia de ficheros en la máquina cliente
o Fin: se muestra el cuado de Instalación terminada
Se pueden modificar las propiedades de estos elementos en la Ventana de Propiedades e incluso cambiar su orden mediante arrastre con el ratón. También se pueden incluir nuevos cuadros durante la instalación accediendo a la opción Agregar Cuadro de Diálogo de Inicio, Progreso o Fin. Se accede a un cuadro que permite elegir el tipo de diálogo necesario
y una vez seleccionado, se pueden cambiar sus características en la Ventana Propiedades
A su vez, se distinguen dos ramas diferentes:
o Instalar: accesible a los usuarios normales de la máquina cliente
o Administrativa: sólo estará disponible para los instaladores que accedan a la máquina cliente como Administradores del sistema. Por ejemplo, se podría eliminar Carpeta de Instalación de la rama Instalar la sección y mantenerla en la Rama Administrativa. De esta forma, sólo los Administradores podrían elegir carpeta destino y los usuarios normales estarían obligados a aceptar la ruta por defecto.
- Acciones personalizadas: permite determinar el código a ejecutar cuando se produzca alguno de cuatro eventos
o Instalar: se produce una vez instalada la aplicación pero cuando aún no se ha dado por concluido el proceso
o Confirmar: ocurre cuando la instalación se ha realizado sin problemas en la máquina cliente y ésta la ha confirmado
o Deshacer: ocurre cuando la instalación ha tenido fallos y es anulada, desinstalando los ficheros que sí se hubieran copiado
o Desinstalar: tiene lugar cuando el usuario está desinstalando la aplicación desde su Panel de Control
Para crear un elemento se selecciona el evento deseado y se elige su opción contextual Agregar Acción personalizada mostrándose el cuadro de diálogo que permite indicar la localización del código a ejecutar dentro del sistema de archivos del programa instalador
Para cada uno de los elementos creados, las propiedades visibles en la Ventana de Propiedades son
o Name: nombre de la acción personalizada
o Arguments: parámetros que puede requerir la acción. Sólo es posible utilizarlos si la acción es implementada a través de un ejecutable (.exe)
o Condition: sentencia booleana que permitirá la acción si es cierta en el momento de la instalación y que la impedirá en caso contrario. Normalmente está asociada a valores adquiridos en cuadros de diálogo extra incluidos en el instalador.
o CustomActionData: sirve para pasara datos a la acción
o EntryPoint: aprece cuando la acción está implementada en una DLL e indica el método a ejecutar. Si no se indica se buscará un método que llame igual que el evento al que está asociada la acción (por ejemplo, Instalar o Install)
o InstallerClass: indica mediante un valor booleano si la acción está implementada en una clase Installer.
o SourcePath: ruta actual en la máquina del desarrollador donde reside el fichero que implementa la acción. Es de sólo lectura.
- Condiciones de inicio: se emplea para determinar una serie de condiciones que deben existir en la máquina para poder instalar la aplicación final. Si no se verifica alguna de ellas la instalación se anulará. Se puede comprobar la versión del sistema operativo, la existencia de ciertos ficheros, búsqueda de claves en el registro, etc. El aspecto inicial de este editor es el siguiente
Para agregar una condición se accede al menú contextual de Buscar equipo de destino se puede elegir entre tres tipos de búsquedas
o Búsqueda de archivo: sirve para comprobar la existencia de un fichero concreto en la máquina cliente. También se puede controlar la versión de ese fichero, los valores máximo y mínimo de su tamaño y sus fechas a través de la Ventana Propiedades
o Búsqueda de Registro: permite buscar una clave concreta en el registro del sistema operativo de la máquina cliente
o Búsqueda de Windows Installer: permite determinar la existencia en la máquina cliente de un componente de Windows Installer porque ésta es la aplicación que controlará el proceso de instalación a partir del fichero .msi generado.
Una vez creada una búsqueda se debe crear una condición de inicio que evalúa si la búsqueda ha tenido éxito. Si es así, la instalación continuará pero, en caso contrario, se anulará.
Para crear una condición se accede a la opción contextual Agregar condición de Inicio de la rama Condiciones de Inicio
Todas las condiciones tienen las mismas propiedades
o Name: nombre de la condición
o Condition: cadena que contiene una expresión booleana válida pudiendo tener concatenación de operadores lógicos (and, or, etc.) y que es verificada durante la instalación. Si es cierta, la instalación continúa y, en caso contrario, es abortada.
o Message: mensaje a mostrar cuando a instalación falla por no cumplirse la condición.