En Inno Setup es posible añadir sentencias condicionales a lo que en la sección [Run] será ejecutado?

StackOverflow https://stackoverflow.com/questions/360037

  •  21-08-2019
  •  | 
  •  

Pregunta

Como alternativa es posible actualizar manualmente el construido en la barra de progreso? Básicamente tengo 2 MSI incluido y el uso de la disposición de Inno como un programa previo, y en función de la entrada del usuario una o las dos de la MSI, deben ser instalados. Tengo algo de trabajo utilizando declaraciones Exec en CurStepChanged pero no actualiza la barra de progreso a medida que se extraen los archivos y parece que se ha detenido el instalador. Creo que el resultado final es que quiero algunas actualizaciones de la barra de progreso mientras se extraen los archivos a la carpeta de archivos temporales. La 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;
¿Fue útil?

Solución

¿Por qué no simplemente intentar 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 que no necesariamente tiene que usar Components. No escribiste cómo usted decide qué instalador se ejecute. Si necesita una lógica más compleja también se podría utilizar funciones 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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top