Scripts en Inno Setup, facilitando tareas.

0
4593

Inno Setup es un instalador gratuito para sistemas Windows. A día de hoy una de las mejores opciones para compilar nuestros programas.

En esta entrada vamos a crear un script y explicaremos la función que realiza. Supongamos que cada cierto tiempo tenemos que realizar una instalación de ciertas aplicaciones de forma repetitiva. En mi caso, instalar PHP 5.6, drivers PHP sqlsrv para PHP 5.6 y visual C++ 2012 V11.

Antes de nada vamos a pegar el script y  lo iremos analizando por partes:

[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={{4E004BF5-F7B8-4D38-A9EB-9DC896A3B995}
AppName=PHP 5.6 and extra files
AppVersion=1.0
AppVerName=PHP Installation 1.0
AppPublisher=local publisher
AppPublisherURL=localhost
AppSupportURL=localhost
AppUpdatesURL=localhost
DefaultDirName={pf}\PHP\v5.6
DefaultGroupName=PHP 5.6 and extra files
AllowNoIcons=yes
OutputDir=C:\TEMP
OutputBaseFilename=PHP 5.6 and extra files
Password=1234
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Code]
function NeedsAddPath(Param: string): boolean;
var
  OrigPath: string;
begin
  if not RegQueryStringValue(HKEY_LOCAL_MACHINE,
    'SYSTEM\CurrentControlSet\Control\Session Manager\Environment',
    'Path', OrigPath)
  then begin
    Result := True;
    exit;
  end;
  { look for the path with leading and trailing semicolon }
  { Pos() returns 0 if not found }
  Result := Pos(';' + Param + ';', ';' + OrigPath + ';') = 0;
end;

[Registry]
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};C:\Program Files (x86)\PHP\v5.6"; Check: NeedsAddPath('C:\Program Files (x86)\PHP\v5.6')  

[Files]
Source: "C:\Program Files (x86)\PHP\v5.6\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "C:\TEMP\software\*"; DestDir: "C:\TEMP\software\"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "vcredist_x86.exe"; DestDir: {tmp}; Flags: deleteafterinstall
Source: "vcredist_x64.exe"; DestDir: {tmp}; Flags: deleteafterinstall
Source: "msodbcsql.msi"; DestDir: {tmp}; Flags: deleteafterinstall

[Run]
Filename: "{tmp}\vcredist_x86.exe ";Parameters:/SILENT;
Filename: "{tmp}\vcredist_x64.exe ";Parameters:/SILENT;
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\msodbcsql.msi"" IACCEPTMSODBCSQLLICENSETERMS=YES /qb"; WorkingDir: {tmp};

[Setup]
AlwaysRestart = yes

La primera parte dentro de los brackets [Setup] son parámetros de configuración. Básicamente lo que definimos son información de la ID, directorios predefinidos, información del publicador e incluso una password como es mi caso.

En el bracket [Languages] definimos el idioma por defecto del script. Posteriormente en el bracket [Code] se definen las funciones que utilizamos en el script. En este caso el script hace lo siguiente:

– Para que funcione PHP se tiene que añadir el directorio de los binarios a la variable de sistema «PATH». Esta función lo único que chequea es si tiene que introducir o no el string en el «PATH» del sistema. En caso de que ya exista la función, acaba. Gracias al usuario «Martin Prikryl» de stackoverflow por compartir dicho función, la podrás encontrar aquí.

El bracket [Registry] guarda la información del tipo de registro que se tiene que añadir en caso de que sea necesario.

Para finalizar tenemos el bracket [Files], aquí indicaremos dónde buscar los directorios que queremos compilar o los archivos a instalar.

En el apartado [Run] hacemos las ejecuciones del software en su instalación. Como podemos ver las instalaciones del VC++ 11 se realizan de forma silenciosa para evitar emergentes durante su instalación y en el caso del MSI forzamos la aceptación de una licencia de uso.

Para finalizar damos la opción de reiniciar el sistema ya que para que la variable de entorno de PHP sea reconocida por el sistema, es necesario reiniciar.

Cosas a tener en cuenta en la compilación del script, verificar que los ficheros existen.

Para que la compilación funcione, en este script en concreto debemos comprobar que la carpeta «C:\Program Files (x86)\PHP\v5.6» exista. Así como los directorios de «C:\TEMP\software\» y los ejecutables definidos en «Source».

Como ya dije esto es una forma de «facilitarnos» las tareas a la hora de instalar cosas en nuestro uso personal. Hay que tener en cuenta que todo software desarrollado por terceros, está sujeto a una licencia como puede ser la «GPL» así como unos términos de uso. De modo que antes de distribuir cualquier cosa debemos asegurarnos que no estamos vulnerando ninguna termino de dicha licencia.

Os dejo las siguientes fuentes a modo informativo e inspiración:

Inno Setup Documentation

Si tienes un script y quieres compartirlo, no dudes en publicarlo en nuestro foro.

¡Hasta la próxima!

DEJA UNA RESPUESTA

Por favor ingrese su comentario!
Por favor ingrese su nombre aquí