Crea el instalador de tu aplicación con soporte para MySQL y SQL Server con InnoSetup

InnoSetup

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

Para empezar, descargaremos InnoSetup desde su página oficial

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

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.

Microsft SQL Server

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 . 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

MySQLPara 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

Microsoft Visual Basic 6Yo 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).


11 Responses

  1. Raul dice:

    Gracias, es justo lo que necesitaba.

  2. Luis Guaño dice:

    Que bestia este manual. Es lo máximo.

  3. Andrés dice:

    Hola, gracias por este tutorial, lo que yo quería hacer crear un instalador donde la ruta donde se instale el programa sea dentro den un archivo con extención .jar es esto posible?

  4. Blas Cota dice:

    Disculpa, y si quiero que el instalador me cree la base de datos de SQL Server 2008 ya con datos y usuarios, se puede? Podrías asesorarme o ayudarme a crear un instalador para mi programa? Te pagaría por ayudarme. Gracias.

  5. fabian dice:

    Amigo excelente aporte me ha ayudado mucho, solo que ahora tengo otro detallito, como puedo agregar a mi script la parte de que tambien me cree el ODBC?. Ya que mi aplicación lo hago mediante una conexión ODBC

  6. Victor dice:

    Hola buen día, como podría realizar la instalación de PostgreSQL y una vez realizada la instalación se ejecute un .sql para la creación de un usuario y de la Base de Datos.

    Un ejemplo me seria de mucha ayuda gracias.

  7. IIoZoII dice:

    Muy buen Tutorial, Gracias eh lo necesitaba!!

  8. Pedro Cardenas Del Angel dice:

    cuales son los parametros para la maquina de virtual de java, bueno para poder instalar. nomas he podido empaquetar la backup de la bd de mysql, mysql. pero la maquina virtual de java noo, me marca un error al instalar..

  9. yrmilan87 dice:

    como podria agregar al path del sistema la direccion donde estoy instalando, esto lo quiero hacer con innosetup… cualquier ayuda se agradece…

  10. Agustin dice:

    Hola
    Tal y como comentas he añadido el script a mi instalador y no me funciona. Me copia los archivos a la carpeta de sistema (syswow64) pero parece que no realiza la instalación. Porque crees que puede ser? Intento instalar una aplicación Vb6 en windows 7 64 bits. Con Bases de datos access me funciona bien. Si descargo el instalador del sitio mysql (conector odbc 3.51.30) también me funciona.
    Gracias por la ayuda

  11. BERNARDINO dice:

    Alguien me puede decir ¿Dónde encuentro las miDLL_64.lib y la de 32 bits? o ¿còmo se llaman estas librerías?

  12. BERNARDINO dice:

    ¿Cómo se llaman las librerias miDLL_64.lib y miDLL_32.lib?, esto es, cuales son sus nombres y donde las puedo localizar.

    Saludos!

  13. Alvaro dice:

    Con este programa puedo hacer un instalador para archivos excel. y si es posible, por favor necesito una guía para hacerlo. Gracias!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© VB-MUNDO – Visual Basic y mucho más
CyberChimps