gpt4 book ai didi

windows-installer - Inno Setup 中的 msi 返回码

转载 作者:行者123 更新时间:2023-12-04 08:19:34 25 4
gpt4 key购买 nike

我想以静默模式调用多个 .msi 文件,如果有任何失败,则停止整个安装。

是否可以获取从 [run] 部分调用的 msiexec.exe 的返回代码?

目前我只能在 windows 事件查看器中看到错误消息。

最佳答案

目前无法检查 [Run] 条目是否成功执行。该代码只记录进程退出代码并继续下一个条目(可以在 Inno Setup 源文件 Main.pas 中检查它,函数是 ProcessRunEntry(),从当前版本 5.2.3 的第 3404 行开始)。

如果您需要确保多次执行 msiexec 都成功,您将需要编写一个中间层。这可以像在 [Run] 条目中执行的小 stub 一样简单,并使用正确的参数启动 msiexec.exe,等待进程完成,然后将返回代码写入文件。

检查此类安装步骤是否成功的另一种方法是使用 AfterInstall 参数为每​​个 [Run] 条目添加自定义过程调用。例如,在这样的函数中,您可以检查 OCX 控件是否已成功安装:

[Run]
Filename: "{tmp}\MyInstallation1.exe"; Parameters: "/foo"; AfterInstall: AfterMyInstallation1

[Code]
var
MyInstallation1Success: boolean;

procedure AfterMyInstallation1;
var
V: Variant;
begin
try
V := CreateOleObject('MyInstallation.InstalledOcxControl.1');
MyInstallation1Success := True;
except
MyInstallation1Success := False;
end;
end;

或者依赖项的目录和注册表项是否都在那里。

每个 [Run] 条目仅在其可选 Check 参数确实返回 true 时才执行。因此,根据您的需要,您可以一个接一个地启动所有静默安装,并在最后一个完成后执行脚本功能以检查所有依赖项是否已成功安装;或者您可以为每个依赖项安装编写一个检查函数,然后返回 false,从而在第一个失败后跳过所有其他安装。

但是请注意,所有 [Run] 条目都是在完成文件复制、注册表写入等步骤后执行的,因此您基本上已经完成了安装。如果您只想在正确安装所有依赖项后才真正执行所有安装步骤,那么您必须在该过程的早期执行此操作,此时仍然可以取消安装。

编辑:查看问题 "How do you make Inno Setup not look frozen while performing a long Exec?"其中给出了一些信息,并链接了一个示例脚本,关于使用 Exec() 函数安装依赖项。因此,如果您不使用 [Run] 条目,则很有可能实现您想要的效果。

关于windows-installer - Inno Setup 中的 msi 返回码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/582452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com