首页 > 解决方案 > 如何从 Inno Setup 的代码部分运行程序或批处理文件?

问题描述

如何在部分中插入Rununzip.exe和批处理文件)Code而不是Run?我尝试了此处使用的方法Inno Setup:安装其他安装程序并在继续安装之前运行它,但无法使其正常工作,因此我恢复使用该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安装后文件清理)

标签: inno-setuppascalscript

解决方案


使用Exec功能。例如在CurStepChanged事件函数中。

您还需要将命令参数中的路径包装到引号中,以防它们包含空格。

[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'), '', '', SW_HIDE, ewNoWait, ErrorCode);
  end;
end;

推荐阅读