inno-setup - 如何从 Inno Setup 的代码部分运行程序或批处理文件?
问题描述
如何在部分中插入Run
(unzip.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
安装后文件清理)
解决方案
使用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;
推荐阅读
- c# - C# JsonConverter 有时会丢失对原始实例的引用
- java - 有没有办法通过spring-boot访问通过KSQL(kafka)创建的表?
- java - 有没有办法在不制定所有规则的情况下到达 AST 的末尾?
- python - 如何在 Pandas 中更新 fsspec
- python - 使用opencv python从视频中检测图像时如何忽略背景?
- python - 如何使用烧瓶使您的网站文本变成蓝色?
- angular - 解释为什么使用 Subject RXJS 测试失败而使用 BehaviourSubject 测试成功
- vue.js - Vue.js 使用自定义类型的两种方式绑定
- javascript - 带有 ESCPOS 库的土耳其字符不起作用
- python - 给定任何纬度,经度。坐标,在列表中找到最近坐标的最快方法是什么?