Процедура Inno Setup AfterInstall выполняется слишком рано, при установке MSI из раздела Run с параметром /qn (без вывода сообщений)

После исполнения mariadb-10.2.11-winx64.msi файл, который устанавливает сервер MariaDB 10.2.11, я хотел бы внести некоторые изменения в файл my.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 Файл не существует на данный момент. Как я могу заставить ConfigMyIni процедура должна быть выполнена только после окончания выполнения mariadb-10.2.11-winx64.msi файл?

Я уже прочитал справку Inno Setup и искал ответы на вопросы о переполнении стека, но не нашел подсказки, которой бы я мог воспользоваться, чтобы решить мою проблему.

Может ли кто-нибудь помочь с этой проблемой?

1 ответ

Решение

Это следствие /qn переключатель. С переключателем верхнего уровня msiexec процесс делегирует установку скрытому подпроцессу и немедленно завершает свою работу.

Рассмотреть возможность использования /qb или же /qb! или подобное, вместо этого.

Увидеть msiexec параметры командной строки.

Другие вопросы по тегам