2008-12-11 18 views
9

或者是否可以手動更新內置的進度條? 基本上我有2個MSI包括在內,並使用Inno Setup作爲引導程序,並根據用戶輸入安裝一個或兩個MSI。我有一些在CurStepChanged中使用Exec語句的工作,但它不會在提取文件時更新進度條,而且看起來安裝程序已停止。我想最終的結果是我想要一些進度欄更新,而文件被提取到臨時文件夾。下面是我當前的代碼:在Inno Setup中是否可以添加條件語句來執行[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; 

回答

24

爲什麼不能簡單地嘗試這樣的事:

[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 

當然你不一定必須使用Components。你沒有寫出你如何決定運行哪個安裝程序。如果您需要更復雜的邏輯,你也可以使用Check functions爲:

[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

我認爲檢查:是我需要知道的東西。在Inno Setup幫助文件中我沒有看到任何有關這方面的信息(這非常有幫助),而且它不是ISTool GUI中的一個選項。 +1現在,如果它有效,我會接受:) – Davy8 2008-12-11 18:20:31

相關問題