Как определить убийство приложения - PullRequest
0 голосов
/ 18 февраля 2010

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

Ответы [ 2 ]

0 голосов
/ 18 февраля 2010

Может быть, вы могли бы попробовать это так в коде Процесса 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...
}

Я не могу с уверенностью сказать, что это будет работать ... сама природа ОС, которая посылает '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!
}

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

0 голосов
/ 18 февраля 2010

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

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

...