2010-02-18 4 views
0

Представьте, у нас есть два приложения .net. Приложение «A» запускает приложение «B» с использованием класса System.Diagnostics.Process. Затем «А» хочет убить «В» методом Process.Kill. Как «B» может определить, что кто-то его убивает?Как определить, убить приложение

+1

дубликат http://stackoverflow.com/questions/1372250/how-to-detect-a-kill-process-event –

ответ

0

Я не думаю, что приложение может реагировать на убийство ... Я думаю, что он работает больше на уровне ОС, например, при использовании диспетчера задач.

Использование Process.Kill() может быть неправильным в этом контексте, можете ли вы предоставить дополнительную информацию о проблеме, которую вы пытаетесь решить?

+0

Да, я обнаружил, что «процесс не может помешать себе прекратить». Думаю, у нас нет возможности это определить. http://msdn.microsoft.com/en-us/library/ms686714(VS.85).aspx – alga

0

Может быть, вы могли бы попробовать это таким образом в рамках кода Process Б ...

 
// 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... 
} 

Я не могу с уверенностью сказать, что это будет работать ... сама природа ОС, которая посылает «Kill» в процесс зависит от реализации, и, таким образом, нет гарантированного надежного способа процесса B, зная, что он убит. Поскольку вы не указали явно, если процесс B является управляемым/неуправляемым процессом, я сделаю основу предположения, что он действительно управляется как тег «.net», если это приложение WinForm, возможно, событие Closing в winForms буду иметь причину в аргументе обработчика события или использовать 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! 
} 

Надеется, что это помогает, с наилучшими пожеланиями, Том.

Смежные вопросы