2008-12-11 9 views
9

Vous pouvez également mettre à jour manuellement la barre de progression intégrée? Fondamentalement, j'ai 2 MSI inclus et en utilisant Inno Setup comme un bootstrapper, et en fonction de l'entrée de l'utilisateur, un ou les deux MSI doivent être installés. J'ai quelque chose fonctionnant en utilisant des instructions Exec dans CurStepChanged mais il ne met pas à jour la barre de progression pendant que les fichiers sont extraits et il semble que le programme d'installation soit bloqué. Je suppose que le résultat final est que je veux des mises à jour de barre de progression pendant que les fichiers sont extraits dans le dossier temporaire. Ce qui suit est mon code actuel:Dans Inno Setup, est-il possible d'ajouter des instructions conditionnelles à ce qui est exécuté dans la section [Run]?

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; 

Répondre

24

Pourquoi ne pas simplement essayer quelque chose comme ceci:

[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 

Bien sûr, vous ne devez pas nécessairement utiliser Components. Vous n'avez pas écrit comment vous décidez quel programme d'installation exécuter. Si vous avez besoin logique plus complexe, vous pouvez également utiliser Check functions comme dans:

[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; 
+0

Je pense que la vérification: est ce que je devais savoir. Je n'ai rien vu à ce sujet dans le fichier d'aide d'Inno Setup (ce qui étonnamment a été assez utile) et ce n'était pas une option dans le IUool GUI. +1 maintenant et accepté si cela fonctionne :) – Davy8

+1

J'ai lié à la section de fichier d'aide pertinente dans la réponse (voir les "fonctions de vérification"). C'est dedans. ISTool prend également cela en charge. Regardez simplement l'onglet "Common" de n'importe quel élément dans la section "Scripting". Si vous avez déjà écrit des fonctions avec un résultat booléen, vous pouvez simplement les sélectionner dans une liste déroulante. –

+0

Oui, j'ai remarqué ça après que j'ai commencé à faire ça. On dirait que ça marche et c'est aussi proche de l'idéal que je vais probablement passer sans passer des heures/jours à faire des recherches et à faire un dialogue de progression personnalisé. Merci :) – Davy8

Questions connexes