Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Новый участник


Сообщения: 19
Благодарности: 6

Профиль | Отправить PM | Цитировать


Цитата SatHan:
Спасибо.
много чего уж перепробовал, но оставил этот, так как код короче всех. потому шансов на ошибки мизерный. »
Цитата R.i.m.s.k.y.:
+1024
C использованием IsTask можно нарваться на параноидальный антивирь который блокирует вызов сторонних неизвестных неподписанных библиотек и dll (IsTask в их числе, ога), как следствие получить в инсталлере "Ошибка вызова xxx.dll" и краш инсталлера.
Самый рабочий вариант в моем посте. Не помню кто его мне накидал, или Serega или El Sanchez »
Просто может ему надо не только найти, но и "убить процесс"!?
Позволил себе немного доработать этот код, некаких .dll, а работает также как IsTask.
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[*Code]
const
    TH32CS_SNAPPROCESS = $2;
    INVALID_HANDLE_VALUE = -1;

type
    TPROCESSENTRY32 = record
        dwSize, cntUsage, th32ProcessID: DWORD;
        th32DefaultHeapID: Longint;
        th32ModuleID, cntThreads, th32ParentProcessID: DWORD;
        pcPriClassBase: Longint;
        dwFlags: DWORD;
        szExeFile: array [0..259] of char;
    end;
var
ResultCode: Integer;

function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): THandle; external 'CreateToolhelp32Snapshot@kernel32.dll stdcall';
function Process32First(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32First@kernel32.dll stdcall';
function Process32Next(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32Next@kernel32.dll stdcall';
function CloseHandle(hObject: THandle): Boolean; external 'CloseHandle@kernel32.dll stdcall';


function IsProcessRunning(FileName: String): Boolean;
var
    hProcessSnap: THandle;
    pe32: TPROCESSENTRY32;
    szExeFile: String;
    
begin
  hProcessSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if hProcessSnap = INVALID_HANDLE_VALUE then Exit;
  pe32.dwSize := sizeof(pe32);
  if not Process32First(hProcessSnap, pe32) then Exit;
  while not Result and Process32Next(hProcessSnap, pe32) do
  begin
    szExeFile := '';
    while not (pe32.szExeFile[Length(szExeFile)] = #0) do szExeFile := szExeFile + pe32.szExeFile[Length(szExeFile)];
    Result := LowerCase(FileName) = LowerCase(szExeFile);
  end;
  CloseHandle(hProcessSnap);
end;


function InitializeSetup(): Boolean;
begin
  Result:= True;
  if IsProcessRunning('notepad.exe') then begin
  if MsgBox('Блокнот запущен.'#13#10'Для продолжения установки нужно закрыть блокнот'#13#10'Закрыть блокнот сейчас?', mbError, MB_YESNO) = IDYES then
  begin
  Exec('cmd', '/C taskkill /f /im notepad.exe /t > nul', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
  end else begin
  MsgBox ('Закройте блокнот и запустите установку заново', mbCriticalError,  MB_OK);
  Result:= False;
end;
end;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:54, 13-10-2012 | #1123