Ветеран
Сообщения: 2186
Благодарности: 876
|
Профиль
|
Отправить PM
| Цитировать
Цитата EdMSL:
Но как сделать это до установки? Т.е. надо что-то вроде [InstallDelete], но для команд. Писать свой скрипт? Если да, то может есть уже готовые примеры, которые выполняются до установки. »
|
EdMSL,
Можно так попробовать:
Скрытый текст
Код: 
[_code]
function IsProcessRunning(FileName: String): Boolean;
var
objSWbemLocator, objSWbemServices: Variant;
begin
try
objSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
except
ShowExceptionMessage;
Exit;
end;
objSWbemServices := objSWbemLocator.ConnectServer();
objSWbemServices.Security_.ImpersonationLevel := 3;
Result := (objSWbemServices.ExecQuery('SELECT * FROM Win32_Process WHERE Name="' + FileName + '"').Count > 0);
end;
procedure CurStepChanged(CurStep: TSetupStep);
var
i: integer;
begin
if CurStep = ssInstall then
begin
if IsProcessRunning('Steam.exe') then
Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM Steam.exe', '', SW_HIDE, ewWaitUntilTerminated, i);
end;
end;
Перед установкой проверяет, запущен ли Steam.exe, если запущен - то закрывает принудительно и продолжается установка.
Ну, или так:
Скрытый текст
Код: 
[Files]
Source: ISTask.dll; DestDir: {app}; Flags: dontcopy
[_Code]
function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';
function InitializeSetup(): Boolean;
begin
If RunTask('Steam.exe', false) then
begin
if MsgBox('Программа Steam используется. Закрыть и продолжить установку?', mbInformation, mb_YesNo) = idYes then
begin
KillTask('Steam.exe');
Result:= True;
end else
Exit;
end;
Result:=True;
end;
Только тогда ISTask.dll будет нужен...
|
-------
Подписываюсь крестиком... Но кнопочку "Полезное сообщение" все равно нажмите...
Последний раз редактировалось Vanadiy777, 08-10-2022 в 18:42.
Отправлено: 17:44, 08-10-2022
| #643
|