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:
Si tienes un script y quieres compartirlo, no dudes en publicarlo en nuestro foro.
¡Hasta la próxima!