Убить процесс перед (пере) установкой с помощью "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 и новее.