使用/ qn(静音)开关从Run部分安装MSI时,Inno Setup AfterInstall过程执行得太早

时间:2017-12-10 13:01:33

标签: inno-setup msiexec

执行安装MariaDB 10.2.11服务器的mariadb-10.2.11-winx64.msi文件后,我想对MariaDB 10.2.11的 my.ini 文件进行一些更改。安装后的服务器。

我尝试使用AfterInstall参数,如下所示:

[Files]
Source: C:\Setup\Bin\mariadb-10.2.11-winx64.msi; DestDir: {tmp}; \
    Flags: ignoreversion promptifolder deleteafterinstall; Components: server

[Run]
Filename: {tmp}\mariadb-10.2.11-winx64.msi; Parameters: /qn; \
    WorkingDir: {tmp}; Flags: shellexec waituntilterminated; AfterInstall: ConfigMyIni
[Code]

procedure ConfigMyIni;
var
  MyIni : String;
begin
  MyIni := ExpandConstant('{pf}\MariaDB 10.2\data\my.ini');
  if FileExists(MyIni) then
    begin
      if IniKeyExists('mysqld', 'character-set-server', MyIni) then
        SetIniString('mysqld', 'character-set-server', 'uft8', MyIni)
      else
        SetIniString('mysqld', 'character-set-server', 'uft8', MyIni);

      if IniKeyExists('mysqld', 'collation-server', MyIni) then
        SetIniString('mysqld', 'collation-server', 'uft8_bin', MyIni)
      else
        SetIniString('mysqld', 'collation-server', 'uft8_bin', MyIni);

      if IniKeyExists('mysqld', 'lower-case-table-names', MyIni) then
        SetIniString('mysqld', 'lower-case-table-names', '1', MyIni)
      else
        SetIniString('mysqld', 'lower-case-table-names', '1', MyIni);
    end;
end;

我已经逐步完成了脚本代码,我发现在ConfigMyIni文件执行结束之前执行了mariadb-10.2.11-winx64.msi过程。那时my.ini文件不存在。如何在ConfigMyIni文件执行结束后强制执行mariadb-10.2.11-winx64.msi过程?

我已经阅读了Inno Setup的帮助,并在Stack Overflow上搜索了任何答案,但没有找到任何可以解决问题的线索。

有人可以就这个问题提供一些帮助吗?

1 个答案:

答案 0 :(得分:0)

这是/qn切换的结果。通过该开关,顶级msiexec进程将安装委托给隐藏的子进程并立即终止。

请考虑使用/qb/qb!或类似内容。

请参阅msiexec command-line options

相关问题