Lee las últimas noticias

Hola de nuevo,

A continuación os voy a explicar cómo introducir un diálogo en Installshield para pedir, por ejemplo, un fichero de licencia de un software. Además también explicaré y pondré el código para copiar el archivo de licencia que haya introducido el usuario final al directorio de instalación del programa utilizando installscript.

Quiero aclarar que me ha llevado muchas horas de investigación por internet, buscando en google y en el manual de installscript.

Empecemos con ello:

  1. Lo primero que se debe hacer es crear o abrir un proyecto del tipo Basic MSI.
  2. A continuación, se busca el apartado User Interface y se pulsa sobre "Dialogs".
  3. Se pulsa sobre "All Dialogs" con el botón derecho del ratón y se selecciona la opción "New Dialog...".
  4. Se pulsa siguiente hasta que aparezca una pantalla para seleccionar el tipo de diálogo que se quiere crear. Aquí se selecciona "Interior Wizard Panel" y se introducen los siguientes valores:
    1. User Interface Sequence: Installation.
    2. Insert the new dialog after: Install Welcome.
  5. Por último, se pulsa sobre "Finalizar" y yo le he cambiado el nombre a "File Browse".

Ahora, se va a personalizar el aspecto del diálogo. Para ello habrá que decir que elementos tiene y crearlo para todos los idiomas para los que se esté creando la instalación. Yo sólo lo voy a explicar en español. Despliego el "+" que aparece a la izquierda de mi diálogo y aparecen todos los idiomas del instalador junto con otra opción llamada "Behavior".

En la opción de Español, yo he cambiado el título del diálogo a "Fichero de Licencia" (Podéis poner lo que queráis), luego he introducido una etiqueta "label" con el siguiente texto: "Por favor, seleccione el fichero de licencia proporcionada por su proveedor de Software:" y he introducido un "Path Edit" que es un campo para introducir la ruta seleccionada. Cuando pida el valor de la propiedad, introducir "IS_BROWSE_FILEBROWSED" (sin comillas). Por último, hay que añadir un "Push Botton" con el texto "Examinar..." (sin comillas).

El siguiente paso será ir a "Custom Actions and Sequences", pulsar el botón derecho del ratón sobre "Custom Actions" y seleccionar la opción "New MSI DLL" con la opción "Stored in Binary Table". Después cambio el nombre de la acción personalizada a "FileBrowse" (sin comillas). El último paso es introducir los siguientes valores en el panel de la derecha de la acción "FileBrowse":

  • DLL Filename: <ISProductFolder>\redist\language independent\i386\FileBrowse.dll
  • Function Name: FileBrowse
  • Return Processing: Synchronous (Ignores exit code)
  • In-Script Execution: Immediate Execution
  • Execution Scheduling: Always execute

Por último hay que crear una serie de propiedades útiles para el cuadro de diálogo. Explico cómo crearlas a continuación:

  1. Ir a "Propery Manager" debajo de "Behavior and Logic" y pulsar sobre el botón "New".
  2. Crear las propiedades con los siguientes nombre y valores:
  • IS_BROWSE_DEFAULTEXTENSIONS = txt  (Esto es porque mis ficheros de licencia son Archivos de Texto txt)
  • IS_BROWSE_FILETYPE = Text Files (*.txt)
  • IS_BROWSE_FILEEXT = *.txt

Hasta aquí todo lo referente a cómo pedir el fichero. A continuación lo que queda es cómo copiar el fichero de licencia selecciona por el usuario al directorio de instalación del programa:

  1. Ir a "Custom Actions and Sequences" y crear una nueva acción personalizada del tipo "New Installscript".
  2. Darle un nombre a la acción personalizada. En mi caso le he dado "CopyLicFile" (sin comillas).
  3. Ir a "Installscript".
  4. En el fichero "setup.rul" introducir el código que pongo a continuación y modificarlo según corresponda:
#include "Ifx.h"
export prototype InstalarLicencia(HWND);
function InstalarLicencia(hMSI)
    // To Do:  Declare local variables.
    STRING rutaFuente,rutaDestino; //almacena la ruta fuente y la ruta destino
    NUMBER nvSize; //número de carácteres que tiene la ruta
begin
    //Introduzco en rutaFuente el valor de la propiedad IS_BROWSE_FILEBROWSED
    nvSize = 256;
    MsiGetProperty (hMSI, "IS_BROWSE_FILEBROWSED", rutaFuente, nvSize);
    //Introduzco en rutaDestino el directorio de instalación obtenido de la propiedad correspondiente
    MsiGetProperty (hMSI, "INSTALLDIR", rutaDestino, nvSize);
    // To Do:  Write script that will be executed when InstalarLicencia is called.
// Para que funcione correctamente, el instalador debe ejecutarse como administrador para que tenga permisos en directorios protegidos de Windows. CopyFile (rutaFuente,rutaDestino ^ "License.txt"); //Copia el fichero License.txt ubicado en la ruta fuente a la ruta destino. end;

Falta ya poco, lo que queda es hacer que la acción personalizada "CopyLicFile" llame a la función Instalar Licencia y que se ejecute en el orden adecuado durante la instalación. Para ello:

  1. Ir a "Custom Actions and Sequences" y seleccionar la acción personalizada "CopyLicFile".
  2. Seleccionar los siguientes valores:
  • Function Name: Instalar Licencia
  • Return Processing: Synchronous (Ignores exit code)
  • In-Script Execution: Immediate Execution
  • Execution Scheduling: Always execute
  • Install Exec Sequence: After Install Files

Para requerir que el instalador se ejecute como administrador, se selecciona el apartado "Releases" dentro de "Media" y se elige la Realese que se esté generando (en mi caso SINGLE_EXE_IMAGE). En la pestaña "Setup.exe", se debe configurar la opción "Required Execution Level" a Administrador.

Para cualquier duda que tengáis sobre el proceso, no dudéis en contactar conmigo y estaré encantado de ayudaros. Adjunto el código con dos funciones, una para instalar la licencia (vista en este tutorial) y otra para desinstalar dicho fichero en la desinstalación.

Un saludo y mucho ánimo con Installshield.

 

CONSENTIMIENTO COOKIES

Utilizamos cookies propias y de terceros para mejorar nuestros productos y servicios mediante el análisis de sus hábitos de navegación. Al aceptar el presente aviso entendemos que das tu consentimiento a nuestra Política de Cookies. Saber más

Acepto