tutorial setup inno for descargar inno-setup

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;