|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
при втором вызове функция не работает
подскажите почему функция при втором вызове не убивает процесс?
т.е. есть 1.exe и 2.exe. оба запущены. при вызове DebugKillProcess(GetProcessId('1.exe')); процесс закрывается. еще раз вызываем DebugKillProcess(GetProcessId('2.exe')); процесс не закрывается Код:
function TForm1.DebugKillProcess(ProcessId: dword): boolean; var pHandle: dword; myPID: dword; HandlesInfo: PSYSTEM_HANDLE_INFORMATION_EX; r: dword; begin Result := false; myPID := GetCurrentProcessId(); if not EnableDebugPrivilege() then Exit; if DbgUiConnectToDbg() <> STATUS_SUCCESS then Exit; pHandle := OpenProcessEx(ProcessId); if DbgUiDebugActiveProcess(pHandle) <> STATUS_SUCCESS then Exit; HandlesInfo := GetInfoTable(SystemHandleInformation); if HandlesInfo = nil then Exit; for r := 0 to HandlesInfo^.NumberOfHandles do if (HandlesInfo^.Information[r].ProcessId = myPID) and (HandlesInfo^.Information[r].ObjectTypeNumber = $8) then begin CloseHandle(HandlesInfo^.Information[r].Handle); Result := true; break; end; VirtualFree(HandlesInfo, 0, MEM_RELEASE); end; |
#2
|
||||
|
||||
Цитата:
Т.е. вместо, например, такого: Код:
if DbgUiConnectToDbg() <> STATUS_SUCCESS then Exit; Код:
var err: DWORD; ..... begin ..... err := DbgUiConnectToDbg(); if err <> STATUS_SUCCESS then raise Exception.CreateFmt('Ошибка №%d: "%s"', [err, SysErrorMessage(err)]); p.s. И чем не подходит завершение процесса через обычный TerminateProcess ? |
#3
|
|||
|
|||
дело в том что в программе нет ошибки...и она сама не завершается.
|
#4
|
||||
|
||||
Цитата:
|
#5
|
|||
|
|||
моя программа завершает 1.exe
после 2.exe не завершается, но моя прога при этом не выходит и не зависает. причина в чем то другом |
#6
|
||||
|
||||
Цитата:
Код:
TerminateProcess(GetProcessId('2.exe'), 0); |
#7
|
|||
|
|||
Цитата:
2.exe - пустое delphi приложение. так что TerminateProcess должен работать |
#8
|
|||
|
|||
прочитал вот что про эту функцию...
Цитата:
обойти это никак? |
#9
|
||||
|
||||
Когда процесс не получается завершить, то какие ошибки возвращает?
|
#10
|
|||
|
|||
Цитата:
if DbgUiDebugActiveProcess(pHandle) <> STATUS_SUCCESS then Exit; ошибка №-1073741788: "" Последний раз редактировалось kudesnik, 04.11.2012 в 21:06. |