Inno setup 在Inno设置中,是否可以将条件语句添加到[Run]部分中执行的内容中?

Inno setup 在Inno设置中,是否可以将条件语句添加到[Run]部分中执行的内容中?,inno-setup,Inno Setup,或者,是否可以手动更新内置进度条? 基本上,我有2个MSI,并使用Inno安装程序作为引导程序,根据用户输入,将安装一个或两个MSI。我在CurStepChanged中使用Exec语句进行了一些工作,但在提取文件时,它不会更新进度条,而且安装程序似乎已暂停。我想最终的结果是,当文件被提取到临时文件夹时,我需要一些进度条更新。以下是我当前的代码: procedure CurStepChanged(CurStep: TSetupStep); var ResultCode: Integer;

或者,是否可以手动更新内置进度条? 基本上,我有2个MSI,并使用Inno安装程序作为引导程序,根据用户输入,将安装一个或两个MSI。我在CurStepChanged中使用Exec语句进行了一些工作,但在提取文件时,它不会更新进度条,而且安装程序似乎已暂停。我想最终的结果是,当文件被提取到临时文件夹时,我需要一些进度条更新。以下是我当前的代码:

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;

为什么不试试这样的方法呢:

[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
当然,您不必使用
组件
。您没有编写如何决定运行哪个安装程序。如果需要更复杂的逻辑,也可以使用:


我想支票是我需要知道的。我在Inno安装帮助文件中没有看到任何关于这方面的内容(这令人惊讶地非常有用),并且在iStol gui中也没有选择+1现在,如果有效,则接受:)我已链接到答案中的相关帮助文件部分(请参阅“检查功能”)。它在那里。ISTool也支持这一点。只需查看“脚本”部分中任何项目的“公共”选项卡。如果你已经编写了带有布尔结果的函数,你可以简单地从下拉列表中选择它们。是的,我注意到在我开始这样做之后。看起来它很有效,而且非常接近理想状态,因为我可能不需要花费数小时/天的时间来研究和制作自定义进度对话框之类的东西。谢谢:)
[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;