Q&A

  • explorer.exe TerminateProcess 하기
안녕 하세요...
오랜만에 글을 올립니다.
다름이 아니라 Task Manager에 있는 explorer.exe를 죽이는 작업을 하고 있는데.
이것이 죽이기 까지는 잘 됐습니다.
그런데 이것이 왠일.....?

TerminateProcess함수로 죽였으나 몇초후 다시 살아 나는 센스..
여기저기 API관련 자료를 뒤져 봐도 답이 안나와 글을 올립니다.

아래 소스는 김영대 님의 Task Manager를 응용 했습니다.

// Kernel32.dll을 사용하여 현재 떠있는 process를 읽어온다
procedure Process32List(Slist: TStrings);
var
  Process32: TProcessEntry32;
  SHandle:   THandle;  // the handle of the Windows object
  Next:      BOOL;
begin
  Process32.dwSize := SizeOf(TProcessEntry32);
  SHandle          := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);

  if Process32First(SHandle, Process32) then
  begin
    // 실행화일명과 process object 저장
    Slist.AddObject(Process32.szExeFile, TObject(Process32.th32ProcessID));
    repeat
      Next := Process32Next(SHandle, Process32);
      if Next then
        Slist.AddObject(Process32.szExeFile, TObject(Process32.th32ProcessID));
    until not Next;
  end;
  CloseHandle(SHandle);  // closes an open object handle
end;

procedure TForm1.B_SearchClick(Sender: TObject);
begin
   // 현재 실행중인 process를 검색
  ListBox1.Items.Clear;
  Process32List(ListBox1.Items);
end;

procedure TForm1.B_TerminateClick(Sender: TObject);
var
  hProcess: THandle;
  ProcId:   DWORD;
  TermSucc: BOOL;
begin
  // 현재 실행중인 process를 kill
  if ListBox1.ItemIndex < 0 then System.Exit;
  ProcId   := DWORD(ListBox1.Items.Objects[ListBox1.ItemIndex]);
  // 존재하는 process object의 handle을 return한다
  hProcess := OpenProcess(PROCESS_ALL_ACCESS, TRUE, ProcId);
  if hProcess = NULL then
    ShowMessage('OpenProcess error !');

  // 명시한 process를 강제 종료시킨다
  TermSucc := TerminateProcess(hProcess, 0);
  if TermSucc = FALSE then
    ShowMessage('TerminateProcess error !')
  else
    ShowMessage(Format('Process# %x terminated successfully !', [ProcId]));


end;


listbox에서 explorer.exe를 TerminateProcess했지만. 다시 살아나서 말썽입니다.
확실하게 죽일수 있는 방법이 없을까요...?

다들 밤 늦도록 더운 날씨에 몸 조심 하세요.

1  COMMENTS
  • Profile
    이정욱 2006.08.10 04:15
    XP에선 원래 다시 살아납니다. 어떤 서비스에서 담당하고 있을텐데요..
    이것을 관리하는 서비스를 찾아서 정지 시키는 수밖엔 없을것 같네요.