![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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. |