2010-02-18 4 views
0

우리는 두 개의 .net 응용 프로그램이 있다고 상상해보십시오. 응용 프로그램 "A"는 System.Diagnostics.Process 클래스를 사용하여 응용 프로그램 "B"를 시작합니다. 그런 다음 "A"는 방법 Process.Kill에 의해 "B"를 죽이고 싶어합니다. "B"가 어떻게 누군가가 그를 죽이고 있다고 판단 할 수 있습니까?응용 프로그램을 죽이는 방법을 결정하는 방법

+1

복제본 http://stackoverflow.com/questions/1372250/how-to-detect-a-kill-process-event –

답변

0

응용 프로그램이 죽는 것에 대응할 수 없다고 생각합니다 ... 나는 작업 관리자를 사용할 때처럼 OS 수준에서 더 많이 작동한다고 생각합니다.

Process.Kill()을 사용하는 것이이 컨텍스트에서 올바르지 않을 수 있습니다. 해결하려는 문제에 대한 자세한 정보를 제공 할 수 있습니까? 어쩌면

+0

그래, "프로세스가 종료되지 못하도록 막을 수는 없다." 나는 우리가 그것을 결정할 기회가 없다고 생각한다. http://msdn.microsoft.com/en-us/library/ms686714(VS.85).aspx – alga

0

당신이 그것을 프로세스 B의 코드 내에서이 방법을 시도해 볼 수도 있습니다 ...

 
// We're in Process B.... 
System.Diagnostics.Process proc = System.Diagnostics.Process.GetCurrentProcess(); 
proc.EnableRaisingEvents = true; 
proc.Exited += new EventHandler(proc_Exited); 

static void proc_Exited(object sender, EventArgs e) 
{ 
    // Handle here that we got killed... 
} 
나는이 작동 할 것이라고 자신있게 말할 수 없습니다

... A가에 '죽여'보내는 OS의 본질 프로세스는 구현에 따라 다르므로 프로세스 B가 완전히 종료되었다는 것을 아는 데있어 확실한 확실한 방법은 없습니다. 프로세스 B가 관리되는 프로세스인지 아니면 관리되지 않는 프로세스인지 명시 적으로 언급하지 않았으므로 실제로는 태그가 '.net'이므로 WinForm 응용 프로그램 인 경우 winForms 내에 Closing 이벤트가있는 것으로 가정합니다. 아래 그림과 같이 해당 이벤트 핸들러의 주장에 이유가 또는 ApplicationDomain에 인스턴스를 사용합니다 :이 도움이

 
AppDomain thisDom = AppDomain.CurrentDomain; 
thisDom.ProcessExit += new EventHandler(thisDom_ProcessExit); 
// 

static void thisDom_ProcessExit(object sender, EventArgs e) 
{ 
    // Handle the situation here where the AppDomain is going to be unloaded and killed! 
} 

희망, 안부, 톰.

관련 문제