for - En Inno Setup, ¿es posible agregar sentencias condicionales a lo que se ejecuta en la sección[Ejecutar]?
inno setup tutorial (1)
Alternativamente, ¿es posible actualizar manualmente la barra de progreso incorporada? Básicamente tengo 2 MSI incluidas y el uso de Inno Setup como iniciador, y dependiendo de la entrada del usuario, se instalarán una o ambas MSI. Tengo algo que funciona utilizando instrucciones Exec en CurStepChanged pero no actualiza la barra de progreso a medida que se extraen los archivos y parece que el instalador está atascado. Supongo que el resultado final es que quiero algunas actualizaciones de la barra de progreso mientras los archivos se extraen a la carpeta temporal. El siguiente es mi código actual:
procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;
begin
if(CurStep = ssInstall) then begin
if(InstallServer) then begin
ExtractTemporaryFile(''ServerSetup.msi'');
Exec(''msiexec'',ExpandConstant(''/i "{tmp}/ServerSetup.msi" /qb INSTALLDIR="{code:GetInstallPath}/Server/" ALLUSERS=2''),'''', SW_SHOW, ewWaitUntilTerminated, ResultCode);
end;
if(InstallClient) then begin
ExtractTemporaryFile(''ClientSetup.msi'');
Exec(''msiexec'',ExpandConstant(''/i "{tmp}/ClientSetup.msi" /qb INSTALLDIR="{code:GetInstallPath}/Client/" ALLUSERS=2''),'''', SW_SHOW, ewWaitUntilTerminated, ResultCode);
end;
end;
end;
¿Por qué no simplemente probar algo como esto?
[Files]
Source: ClientSetup.msi; DestDir: {tmp}; Flags: deleteafterinstall; Components: Client
Source: ServerSetup.msi; DestDir: {tmp}; Flags: deleteafterinstall; Components: Server
[Run]
Filename: msiexec.exe; Parameters: /i "{tmp}/ClientSetup.msi" /qb INSTALLDIR="{code:GetInstallPath}/Client/" ALLUSERS=2; WorkingDir: {tmp}; StatusMsg: Installing client; Components: Client
Filename: msiexec.exe; Parameters: /i "{tmp}/ServerSetup.msi" /qb INSTALLDIR="{code:GetInstallPath}/Server/" ALLUSERS=2; WorkingDir: {tmp}; StatusMsg: Installing server; Components: Server
[Components]
Name: Client; Description: Client Installation
Name: Server; Description: Server Installation
Por supuesto, no necesariamente tiene que usar Components
. No escribió cómo decide qué instalador ejecutar. Si necesita una lógica más compleja, también puede usar las funciones de Check
como en:
[Files]
Source: ClientSetup.msi; DestDir: {tmp}; Flags: deleteafterinstall; Check: CheckClient
Source: ServerSetup.msi; DestDir: {tmp}; Flags: deleteafterinstall; Check: CheckServer
[Run]
Filename: msiexec.exe; Parameters: /i "{tmp}/ClientSetup.msi" /qb INSTALLDIR="{code:GetInstallPath}/Client/" ALLUSERS=2; WorkingDir: {tmp}; StatusMsg: Installing client; Check: CheckClient
Filename: msiexec.exe; Parameters: /i "{tmp}/ServerSetup.msi" /qb INSTALLDIR="{code:GetInstallPath}/Server/" ALLUSERS=2; WorkingDir: {tmp}; StatusMsg: Installing server; Check: CheckServer
[Code]
function CheckClient: Boolean;
begin
Result := WhateverCondition;
end;
function CheckServer: Boolean;
begin
Result := WhateverOtherCondition;
end;