如何从Inno Setup的“代码”部分运行程序或批处理文件?

问题描述

如何在Run部分而不是unzip.exe内插入CodeRun和批处理文件)?我尝试了Inno Setup: Install other installer and run it before continuing my install此处使用的方法,但是无法使其正常工作,因此我恢复使用Run部分来运行两个脚本。到目前为止,我所做的事情显得草率。 Inno Setup的“完成”页面显示一个选项复选框以运行批处理脚本,而我希望它在此阶段之前自动运行。

[Setup]
Privilegesrequired=admin

[Files]
Source: "CC.exe"; DestDir: "{pf}\CC"; DestName: "CC.exe"
Source: "bbb.update.zip"; DestDir: "{userdesktop}"; Flags: deleteafterinstall
Source: "unzip.exe"; DestDir: "{userdesktop}"; Flags: deleteafterinstall

[Run]
Filename: "{userdesktop}\unzip.exe"; \
    Parameters: "x {userdesktop}\bbb.update.zip -d {userdesktop}"; \
    Flags: runascurrentuser Nowait
Filename: "{userdesktop}\update.bat"; \
    Flags: runascurrentuser Nowait postinstall skipifsilent

update.bat文件在安装后清除)

解决方法

使用Exec function。例如在CurStepChanged event function中。

如果路径中包含空格,则还需要将命令参数中的路径包装在引号中。

[Code]

procedure CurStepChanged(CurStep: TSetupStep);
var
  ErrorCode: Integer;
begin
  if CurStep = ssPostInstall then
  begin
    Exec(
      ExpandConstant('{userdesktop}\unzip.exe'),ExpandConstant('x "{userdesktop}\bbb.update.zip" -d "{userdesktop}"'),'',SW_HIDE,ewNoWait,ErrorCode);

    Exec(
      ExpandConstant('{userdesktop}\update.bat'),ErrorCode);
  end;
end;