代码之家  ›  专栏  ›  技术社区  ›  IMeMine

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

  •  1
  • IMeMine  · 技术社区  · 8 年前

    合同签署后 mariadb-10.2.11-winx64.msi 文件,安装了MariaDB 10.2.11服务器,我想对 我的ini公司 MariaDB 10.2.11服务器安装后的文件。

    我尝试使用 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 文件此时不存在。如何强制 仅在执行结束后执行的程序 mariadb-10.2.11-winx64。msi公司 文件

    我已经阅读了Inno安装程序的帮助,并搜索了关于堆栈溢出的任何答案,但没有找到任何可以解决问题的线索。

    有谁能在这个问题上给点帮助吗?

    1 回复  |  直到 8 年前
        1
  •  0
  •   Martin Prikryl    5 年前

    这是 /qn 转换有了开关,顶层 msiexec 进程将安装委托给隐藏的子进程,并立即终止。

    考虑使用 /qb 或 /qb! 或者类似的。

    看见 msiexec command-line options .