You are on page 1of 4

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 con
ejemplos que tiene Flexera en su página web.

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
De este paso, tenéis toda la información en el siguiente
enlace:http://helpnet.installshield.com/installshield16helplib/FileOpen
Dialog-HowTo.htm
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 destin
o
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 p
ropiedad correspondiente
MsiGetProperty (hMSI, "INSTALLDIR", rutaDestino, nvSize);
// To Do: Write script that will be executed when InstalarLicencia is ca
lled.
// Para que funcione correctamente, el instalador debe ejecutarse como ad
ministrador para que tenga permisos en directorios protegidos de Windows.
CopyFile (rutaFuente,rutaDestino ^ "License.txt"); //Copia el fichero Lic
ense.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.