Выполните пользовательскую команду, чтобы закрыть запущенный процесс перед установкой в ​​Inno Setup - PullRequest
0 голосов
/ 10 мая 2018

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

Я выбираю «Автоматически закрывать приложения» и нажимаю Далее .Кажется, Inno Setup что-то делает, чтобы закрыть это приложение, но не закрывает его должным образом.

Значок на панели задач исчезает, но процесс продолжается.

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

Приложение имеет параметр /exitall, который закрывает все экземпляры этого приложения, включая самого себя.

Можно ли выполнить команду командной строки при запуске Setup.exe до того, как Inno Setup обнаружит запущенные приложения?

1 Ответ

0 голосов
/ 10 мая 2018

Используйте CurStepChanged(ssInstall) для выполнения вашей команды "kill":

procedure CurStepChanged(CurStep: TSetupStep);
var
  AppPath: string;
  ResultCode: Integer;
begin
  if CurStep = ssInstall then
  begin
    Log('Installing...');
    AppPath := ExpandConstant('{app}\MyProg.exe');
    if not FileExists(AppPath) then
    begin
      Log(Format('Application %s was not installed yet.', [AppPath]));
    end
      else
    begin
      Log(Format('Application %s is installed, running cleanup procedure...', [AppPath]));
      if not Exec(AppPath, '/exitall', '', SW_SHOWNORMAL, ewWaitUntilTerminated,
                  ResultCode) then
      begin
        Log('Failed to run cleanup procedure.');
      end;
    end;
  end;
end;

Хотя стандартным способом является использование директивы AppMutex чтобы программа установки не смогла продолжить работу, прежде чем пользователь закроет приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...