Убить процесс перед (пере) установкой с помощью "taskkill /f /im" в Inno Setup

Я устанавливаю сервис / демон, который нужно убить перед удалением и переустановкой.

Я уже узнал, как это сделать для удаления:

[UninstallRun]
Filename: "taskkill"; Parameters: "/im ""My Service.exe"" /f"; Flags: runhidden

[Run] раздел, однако, запускается после установки, поэтому я не могу использовать его для этого. Каков наилучший способ убить процесс, используя taskkill перед установкой?

Обратите внимание, что я специально хочу убить процесс. Более сложное решение с использованием IPC не дает никаких преимуществ в моем случае, я просто хочу выполнить taskkill перед установкой конкретного файла.

2 ответа

Решение

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

[Files]
Source: "My Service 1.exe"; DestDir: "{app}"; Flags: ignoreversion; BeforeInstall: TaskKill('My Service 1.exe')
Source: "My Service 2.exe"; DestDir: "{app}"; Flags: ignoreversion; BeforeInstall: TaskKill('My Service 2.exe')

[Code]
procedure TaskKill(FileName: String);
var
  ResultCode: Integer;
begin
    Exec(ExpandConstant('taskkill.exe'), '/f /im ' + '"' + FileName + '"', '', SW_HIDE,
     ewWaitUntilTerminated, ResultCode);
end;

Если установщик не работает на компьютере с Windows XP, или вы установили CloseApplications директива к no (по умолчанию yes), установщик должен автоматически закрыть приложение:

Функциональность доступна начиная с Inno Setup 5.5 в Windows Vista и новее.

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