2008-12-11 99 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

相关问题