En la etapa de finalización del desarrollo de software, es imprescindible crear un paquete instalador del producto y todas sus necesidades para que este funcione (dependencias). Para esto, InnoSetup es una excelente alternativa: flexible y poderoso, además de ser libre.
InnoSetup cuenta con plantillas típicas de cualquier instalador simple, y además de poder personalizar y adaptar el paquete final a través de la programación en pascal que incluye InnoSetup para, por ejemplo, abrir excepciones en el firewall de Windows, buscar y/o registrar una dependencia, etc.
A continuación, veremos como esta formada un archivo de InnoSetup para generar un instalador. Se puede utilizar como plantilla
En InnoSetup se crean los instaladores mediante código en un archivo similar al formato de archivos INI o de configuración, pero existe software extra que funciona como IDE para lograr una mejor organización. Estos son:
InnoIDE e
Inno Script Studio
Cuando abren InnoSetup pueden crear un script mediante un asistente, recomiendo que lo sigan, ya que los siguientes puntos se trabajan sobre el código.
Secciones
En la primera sección se ubican los detalles básicos del producto (nombre del producto, versión, autor/empresa, etc.) y los parámetros del instalador en si (compresión, ubicación del archivo ejecutable final, lenguaje por defecto del instalador, etc.). No hay mucho que tocar una vez terminado el asistente.
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId=(Generado por InnoSetup)
AppName=Mi Aplicación
AppVersion=1.0
AppPublisher=VB−MUNDO
AppPublisherURL=http://www.vb−mundo.com/
AppSupportURL= http://www.vb−mundo.com/
DefaultDirName={pf}\vb−mundo ; {pf} es Program Files / Archivos de Programa, ahí se instalar nuestra aplicación por defecto
DefaultGroupName=Mi Aplicación ; nombre de la entrada en el menú inicio
AllowNoIcons=yes ; Permite que no se creen iconos de accesos en el menú inicio
OutputDir=D:\ ; Ruta donde se generará el instalador
OutputBaseFilename=instalador ; Nombre del instalador
Compression=lzma2
SolidCompression=yes
ShowLanguageDialog=no ; Permite seleccionar el lenguaje del instalador
PrivilegesRequired=admin ; Para instalar, es necesario permisos de administrador
Editor del InnoSetup
En la sección Files, se indica donde están todos los archivos que se van a incluir en el instalador final. Se debe indicar su ubicación real y su ubicación en donde se deben extraer (archivos temporales, instaladores de dependencias, etc.) o instalar. Además se puede especificar otros parámetros: Sobrescribir archivos existentes, incluir carpetas enteras, registrar archivos DLL, marcar que no se desinstalen, etc. También se indican los archivos OCX o DLL necesarios para la aplicación
[Files]
Source: "D:\Mi App\aplicacion.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Mi App\iconos\*"; DestDir: "{app}\iconos"; Flags: recursesubdirs createallsubdirs
; Registro de OCX
Source: "D:\Mi App\MSCOMCTL.OCX"; DestDir: "{app}"; Flags: uninsneveruninstall sharedfile regserver
; Archivos que solo se instalen según el SO sea 32 o 64 bits, en el sistema
Source: "D:\DLL\miDLL_64.lib"; DestDir: "{sys}"; Check: Is64BitInstallMode; Flags: sharedfile uninsneveruninstall
Source: "D:\DLL\miDLL_32.lib"; DestDir: "{sys}"; Check: Is32BitInstallMode; Flags: sharedfile uninsneveruninstall
En la sección Icons, se indica que accesos directos se deben crear: en general en el escritorio, en el menú inicio, un acceso a la web del creador, y el desinstalador correspondiente. Pero se pueden agregar tantos accesos como se quiere (ejemplo para registrar o comprar, acceder al software con otros parámetros, un manual o archivo Léeme, etc.)
[Icons]
; EXE general
Name: "{group}\Iniciar Mi Aplicacion"; Filename: "{app}\ aplicacion.exe"
; Enlace a página web
Name: "{group}\Visita mi web"; FileName: http://www.vb-mundo.com/
; Desinstalar
Name: "{group}\{cm:UninstallProgram, Mi Aplicación}"; FileName: "{uninstallexe}"
; Acceso directo en escritorio de todos los usuarios
Name: "{commondesktop}\Mi Aplicación"; FileName: "{app}\aplicacion.exe"; Tasks: desktopicon
En la sección Run se indica que se debe o puede hacerse luego de la instalación, ejemplo: dar la opción de ejecutar el software luego de su instalación. Pero también puede ser para instalar dependencias o registrar archivos.
[Run]
FileName: "{app}\aplicacion.exe"; Description: "{cm:LaunchProgram,Mi Aplicacion}"; Flags: postinstall skipifsilent
Task: Puede ser que no siempre se quiera instalar todo el paquete sino partes de ella o con opciones. Ejemplo cuando se instalan reproductores multimedia se dan las opciones de los componentes a instalar y los tipos de archivos a registrar. Estos son los task y pueden ser tanto el agregado de archivos. Los archivos a incluirse en un task deberán llevar un flag específico (un flag es una opción).
[Tasks]
; Preguntar si desea un icono en el escritorio
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}";
Instalación de conectores de base de datos
La gran mayoría de software comercial y/o administrativo hace uso de base de datos, en un equipo de desarrollo ya están instalados por el IDE de desarrollo, por esto es que no se necesita volver a instalar a la hora de probar el instalador. Aún así, si es llevado a un equipo de prueba la aplicación no funcionará. Se necesita un conector ODBC para que una aplicación se conecte a una base de datos Microsoft SQL Server o MySQL, a continuación los pasos necesarios para incluirlos en nuestro instalador hecho con InnoSetup.
Conector Microsoft SQL Server
Primero lo que se debe hacer es descargar el instalador del conector ODBC, que se llama SQL Server Native Client, para
SQL 2005 o
SQL 2008. Deben descargar el archivo sqlncli en su versión requerida (32 o 64 bits). Luego, para que sea instalado automáticamente necesitaremos estas líneas
[Files]
; Copiar lo necesario, incluyo para ambas arquitecturas
Source: "D:\SQL\sqlncli_32.exe"; DestName: "sqlncli.exe"; DestDir: "{tmp}"; Check: not Is64BitInstallMode;
Source: "D:\SQL\sqlncli_64.exe"; DestName: "sqlncli.exe"; DestDir: "{tmp}"; Check: Is64BitInstallMode;
[Run]
Filename: "msiexec.exe"; Parameters: "/i /qb ""{tmp}\sqlncli.msi"""; StatusMsg: "Instalando SQL Native Client...";
; en caso de querer reiniciar, en la parte de parameters, también iria: "REBOOT=ReallySuppress"
Conector MySQL
Para instalar una aplicación que use MySQL, esta debe contar con el conector ODBC de MySQL que se puede descargar en la
página oficial de MySql. El instalador es en realidad un archivo bat que copia archivos a la carpeta de sistema y luego los registra. El bat es innecesario, se puede copiar su comportamiento con InnoSetup, quedando de la siguiente forma
[Files]
; 64 bits
Source: "D:\MySQL ODBC Connector\mysql-connector-odbc-noinstall-5.1.6-winx64\lib\myodbc5.lib"; DestDir: "{sys}"; Check: Is64BitInstallMode; Flags: sharedfile uninsneveruninstall
Source: "D:\MySQL ODBC Connector\mysql-connector-odbc-noinstall-5.1.6-winx64\lib\myodbc5S.lib"; DestDir: "{sys}"; Check: Is64BitInstallMode; Flags: sharedfile uninsneveruninstall
Source: "D:\MySQL ODBC Connector\mysql-connector-odbc-noinstall-5.1.6-winx64\lib\myodbc5.dll"; DestDir: "{sys}"; Check: Is64BitInstallMode; Flags: sharedfile uninsneveruninstall
Source: "D:\MySQL ODBC Connector\mysql-connector-odbc-noinstall-5.1.6-winx64\lib\myodbc5S.dll"; DestDir: "{sys}"; Check: Is64BitInstallMode; Flags: sharedfile uninsneveruninstall
Source: "D:\MySQL ODBC Connector\mysql-connector-odbc-noinstall-5.1.6-winx64\doc\myodbc3.hlp"; DestDir: "{sys}"; Check: Is64BitInstallMode; Flags: sharedfile uninsneveruninstall
Source: "D:\MySQL ODBC Connector\mysql-connector-odbc-noinstall-5.1.6-winx64\bin\myodbc-installer.exe"; DestDir: "{sys}"; Check: Is64BitInstallMode; Flags: sharedfile uninsneveruninstall
; 32 bits
Source: "D:\MySQL ODBC Connector\mysql-connector-odbc-noinstall-5.1.6-win32\lib\myodbc5.lib"; DestDir: "{sys}"; Check: not Is64BitInstallMode; Flags: sharedfile uninsneveruninstall
Source: "D:\MySQL ODBC Connector\mysql-connector-odbc-noinstall-5.1.6-win32\lib\myodbc5S.lib"; DestDir: "{sys}"; Check: not Is64BitInstallMode; Flags: sharedfile uninsneveruninstall
Source: "D:\MySQL ODBC Connector\mysql-connector-odbc-noinstall-5.1.6-win32\lib\myodbc5.dll"; DestDir: "{sys}"; Check: not Is64BitInstallMode; Flags: sharedfile uninsneveruninstall
Source: "D:\MySQL ODBC Connector\mysql-connector-odbc-noinstall-5.1.6-win32\lib\myodbc5S.dll"; DestDir: "{sys}"; Check: not Is64BitInstallMode; Flags: sharedfile uninsneveruninstall
Source: "D:\MySQL ODBC Connector\mysql-connector-odbc-noinstall-5.1.6-win32\doc\myodbc3.hlp"; DestDir: "{sys}"; Check: not Is64BitInstallMode; Flags: sharedfile uninsneveruninstall
Source: "D:\MySQL ODBC Connector\mysql-connector-odbc-noinstall-5.1.6-win32\bin\myodbc-installer.exe"; DestDir: "{sys}"; Check: not Is64BitInstallMode; Flags: sharedfile uninsneveruninstall
[Run]
FileName: "{sys}\myodbc-installer.exe"; Parameters:"-d -a -n ""MySQL ODBC 5.1 Driver"" -t ""DRIVER=myodbc5.dll;SETUP=myodbc5S.dll"" ";StatusMsg: "Registrando MySQL...";
Instalando Runtimes Visual Basic 6
Yo soy de programar aplicaciones en Visual Basic, que para su ejecución requieren ciertos archivos DLL registrados en el sistema. Para que el instalador de InnoSetup los registre, deben estar las siguientes líneas. Y se deben incluir los archivos que se descargan desde este
enlace y el siguiente código (no difiere del código del enlace a la documentación de InnoSetup)
; begin VB system files
; (NotD: Scroll to the right to see the full lines!)
Source: "D:\Raul\Sources\vb runtimes\stdole2.tlb"; DestDir: "{sys}"; OnlyBelowVersion: 0,6; Flags: restartreplace uninsneveruninstall sharedfile regtypelib
Source: "D:\Raul\Sources\vb runtimes\msvbvm60.dll"; DestDir: "{sys}"; OnlyBelowVersion: 0,6; Flags: restartreplace uninsneveruninstall sharedfile regserver
Source: "D:\Raul\Sources\vb runtimes\oleaut32.dll"; DestDir: "{sys}"; OnlyBelowVersion: 0,6; Flags: restartreplace uninsneveruninstall sharedfile regserver
Source: "D:\Raul\Sources\vb runtimes\olepro32.dll"; DestDir: "{sys}"; OnlyBelowVersion: 0,6; Flags: restartreplace uninsneveruninstall sharedfile regserver
Source: "D:\Raul\Sources\vb runtimes\asycfilt.dll"; DestDir: "{sys}"; OnlyBelowVersion: 0,6; Flags: restartreplace uninsneveruninstall sharedfile
Source: "D:\Raul\Sources\vb runtimes\comcat.dll"; DestDir: "{sys}"; OnlyBelowVersion: 0,6; Flags: restartreplace uninsneveruninstall sharedfile regserver
; end VB system files
Y con eso y probar el instalador, ya tendremos un instalador fácil y rápido, totalmente personalizable para nuestra aplicación.
No duden en leer la documentación oficial de InnoSetup y los FAQ (Frecuently Asked Question, Preguntas Frecuentes).