sábado, 4 de febrero de 2017

Como crear instaladores para Inno Setup





Un tutorial en dos partes

   Para que el video no resultara muy largo, decidí dividirlo en dos partes, en la primera haremos el instalador básico y la pantalla personalizada que nos permitirá agregar los datos de conexión a nuestra base de datos, en la segunda parte verificaremos la instalación de Java y haremos la asociación a la extensión .MP.
  Los dos videos serán publicados aquí mismo, en esta misma entrada cuando esten disponibles.


Tipos de objeto usados


  •    TInputQueryWizardPage: Tipo de clase que denota, exclusivamente páginas para ingresar información, hay otros tipos de página como por ejemplo: TInputOptionWizardPage, TInputDirWizardPage, TInputFileWizardPage, que respectivamente son para páginas de, opciones, selección de carpetas y selección de archivos.
  • TSetupStep: Estado o "paso" en el cual se encuentra la instalación, tenemos: ssInstall que ocurre justo antes de que la instalación comience, ssPostInstall justo después de que la instalación termina, ssDone cuando nuestro programa setup finaliza luego de una instalación exitosa. Este tipo de objeto lo usamos en la función CurStepChanged

Constantes que denotan las páginas de nuestro setup

  En las funciones para crear nuestras pantallas personalizadas, el primer parámetro es una constante que denota la página después de la cual va a estar ubicada nuestra pantalla personalizada, a continuación cada una de esas constantes:
  • wpWelcome: La página de bienvenida, no usada en el tutorial
  • wpLicense: Donde aparece el contrato de licencia, la primera página del setup que creamos en el tutorial
  • wpPassword: Si nuestro instalador solicita contraseña para instalar esta será la página, no usada en el tutorial
  • wpInfoBefore: Información que deseemos mostrar antes de instalar, no usada en el tutorial
  • wpUserInfo: Información del usuario
  • wpSelecDir: Página donde se selecciona la carpeta de instalación, la usamos en el tutorial para indicar que después de esta página va nuestra página personalizada
  • wpSelectComponents: Seleccionar los componentes de la aplicación que se deseen instalar, no usada en el tutorial
  • wpSelectTask: Donde aparecen ciertas tareas adicionales, como por ejemplo crear el acceso directo a escritorio
  • wpReady: Donde nos muestra el resumen de lo que se va a instalar
  • wpPreparing, wpInstalling: Respectivamente, donde se empieza a preparar la instalación y donde comienza la instalación propiamente
  • wpInfoAfter: Información que deseemos mostrar al finalizar la instalación
  • wpFinished: Página final de nuestro setup

MsgBox y sus valores

  Como vimos en el video, la función MsgBox toma tres valores, el texto a mostrar, icono y el número de botones. Estos dos últimos se denotan con constantes que les voy a mostrar a continuación:

Primero los iconos
  • mbInformation 
  • mbConfirmation 
  • mbError 
  • mbCriticalError 
   Ahora los botones
Estos son nemotécnicos así que no los voy a describir: MB_OK, MB_OKCANCEL, MB_ABORTRETRYIGNORE, MB_YESNOCANCEL, MB_YESNO, MB_RETRYCANCEL

Las funciones de evento

  Si nos vamos a esta página en la documentación de Inno Setup, podremos ver que la cantidad de funciones de evento es enorme, así que aquí me voy a limitar a hablar de las funciones utilizadas en el tutorial:
  • NextButtonClick: Aquí estamos reaccionando a los clics en el botón de "Siguiente", esta función se declara con "function" ya que devuelve valores, y tiene un parámetro de tipo entero que denota el "ID" de la página, si en esa página nuestra función devuelve "False" el instalador no avanzará de esa página. Para obtener el "ID" simplemente hacemos: nombreDePagina.ID
  • CurStepChanged: Aquí estamos reaccionando cada vez que alcancemos un paso diferente en nuestra instalación, se declara con "procedure" ya que no devuelve valores, se le pasa un parámetro del tipo TSetupStep, en esta misma entrada en la sección "Tips de objeto usados" puedes ver las constantes usadas para esos pasos

Valores de espera y visualización para Exec y ShellExec


    Como se mostraran las ventanas:
  • SW_SHOW y SW_SHOWNORMAL: Son esencialmente lo mismo muestran la ventana de forma predeterminada
  • SW_SHOWMAXIMIZED: Muestra la ventana totalmente maximizada
  • SW_SHOWMINIMIZED: Muestra la ventana minimizada
  • SW_SHOWMINNOACTIVE: Ventana no activa, va a quedar atrás en el foco 
  • SW_HIDE: No se va a mostrar la ventana, la aplicación que ejecutemos va a quedar en segundo plano
  Valores de espera, esto significa si vamos a esperar a que termine de ejecutarse antes de continuar
  • ewNoWait: No se va a esperar a que termine la ejecución de la aplicación llamada
  • ewWaitUntilTerminated: El instalador va a esperar a que la aplicación llamada se cierre totalmente antes de continuar
  • ewWaitUntilIlde: El instalador va a esperar a que la aplicación llamada quede inactiva, pero esta va a seguir ejecutandose

Aclaratoria

  En el video, se me olvidó explicar algo, cuando seleccionamos los archivos y carpetas que va a copiar nuestro instalador:


  En el botón de "Add folder" podemos seleccionar una carpeta entera para que nuestro instalador copie su contenido, en el tutorial seleccionamos la carpeta "lib" que contiene el conector de MySQL, esto en nuestro script nos genera la siguiente linea en la sección de "[Files]" :

Source: "C:\Users\satur\Documents\Proyectos innoSetup\Tutorial\lib\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

  La sección "DestDir" indica la carpeta de destino, que como sabemos usando la constante "{app}" se refiere a la carpeta de instalación de nuestro programa.  Pero en este caso solo nos copiará los archivos dentro de la carpeta, mas no la carpeta como tal, si queremos que nos copie la carpeta completa debemos hacer lo siguiente:

DestDir : "{app}/nombreDeCarpeta"

Descargas



Mantente en contacto conmigo:


6 comentarios:

  1. Hola, tengo un problema con Inno Setup y es el siguiente: Instalo un programa y cuando lo ejecuto falla cuando inte3nta escribir archivos. Sin embargo si lo ejecuto como administrador funciona. ¿Como puedo hacer una instalación que permita ejecutar a cualquier usuario mi programa?

    ResponderEliminar
    Respuestas
    1. Tal vez sea demasiado tarde, lo se, pero para alguien más que vea ete blog aquí pueden ver una opción
      https://www.youtube.com/watch?v=9cVwVqtgwus

      Eliminar
  2. hola GioCode resulta que hice un instalador para instalar postgresql que se instala bien e incluso se crea una base de dato y se importa datos a las tablas ...el problema que anda en win 7 y win xp pero no me anda en windows 10 no se como hacer ...ahí me he quedado atrancado. tal ves si te paso el código..se pueda pulir un poco mas ... muchas gracias por tus vídeos saludos...

    ResponderEliminar
  3. Hola buena noche, estoy haciendo un instalador para unos archivos, no tengo mucho conocimiento en pascal, es por eso les pido su ayuda, lo que necesito hacer es que al iniciar la instalación busque un x directorio en AppData\Roaming, si exite el directorio borrarlo antes de continuar con la instalación y si no existe continuar con la instalación, también que se verifique la versión de Java y si es menor a la versión del archivo copiado se actualice.
    Espero haberme explicado y poder contar con su valiosa ayuda.

    Gracias

    ResponderEliminar
  4. informacion muy util.. pregunta como puedo hacer una validacion por SO ya sea a 32 o 64? que si es uno u otro mediga que corresponde a la version de mi programa corresponde, para evitar que usen el setup de 32 en una de 64 o uno de 64 en una de 32... ayuda!! :V

    ResponderEliminar
  5. Muy buen aporte, gracias a él me he atravido a modificar algunos aspectos de mi instalador. Todo muy claro, mil gracias.

    Tengo una duda de cómo podría modificar una de las páginas ya existentes en Inno Setup, por ejemplo me guataría añadir opciones (excluyentes, tipo radio) a la página wpSelectTasks

    ¿Eso es posible? No encuentro el evento necesario, quizá es imposible.

    ResponderEliminar