加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows-installer – msi在Inno Setup中返回代码

发布时间:2020-12-14 04:14:40 所属栏目:Windows 来源:网络整理
导读:我想在静默模式下调用多个.msi文件,如果失败则暂停整个安装. 是否可以从[run]部分获取msiexec.exe的返回码? 目前我只能在Windows事件查看器中看到错误消息. 目前无法检查[Run]条目的成功执行.代码只记录进程退出代码并继续下一个条目(可以在Inno Setup源文
我想在静默模式下调用多个.msi文件,如果失败则暂停整个安装.

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

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

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

如果您需要确保msiexec的多次执行都成功,则需要编写中间层代码.这可以像在[Run]条目中执行的小存根一样简单,并使用正确的参数启动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,从而在第一个失败之后跳过所有其他安装.

但请注意,在完成文件复制,注册表写入等步骤后,所有[运行]条目都会执行,因此您基本上已经完成了安装.如果只想在所有依赖项都已正确安装的情况下才真正执行所有安装步骤,那么在安装仍然可以取消的过程中,您必须在此过程中提前执行此操作.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读