如何通知不同域中的另一个应用程序当前正在运行的应用程序已崩溃?换句话说,是否可以在不同的域中协商两个不同的应用程序?
提前致谢。
如何通知不同域中的另一个应用程序当前正在运行的应用程序已崩溃?换句话说,是否可以在不同的域中协商两个不同的应用程序?
提前致谢。
您可以将命名管道用于此类 IPC。为此,请查看System.IO.Pipe的命名空间和优秀的NamedsPipeServerStream
&NamedPipeClientStream
类。
请注意,您只能将匿名管道用于同一域内的进程间通信,而您可以将命名管道用于不同域中的 IPC(即跨同一 Intranet 上的 PC)。
您可以使用该AppDomain.UnhandledException
事件向另一个 AppDomain 发出信号,可能通过一个命名的 Mutex。由于它们是系统范围的,您可以创建一个名为“MyAppHasCrashed”并立即锁定它。当您遇到未处理的异常时,您释放互斥锁。另一方面,有一个线程在互斥体上等待。由于它最初被阻塞,线程将等待。当发生异常时,线程恢复并且您可以处理崩溃。
Mutex crashed = new Mutex(true, "AppDomain1_Crashed");
...
private void AppDomain_UnhandledException(...)
{
// do whatever you want to log / alert the user
// then unlock the mutex
crashed.ReleaseMutex();
}
然后,在另一边:
void CrashWaitThread()
{
try {
crashed = Mutex.OpenExisting("AppDomain1_Crashed");
}
catch (WaitHandleCannotBeOpenedException)
{
// couldn't open the mutex
}
crashed.WaitOne();
// code to handle the crash here.
}
这有点像 hack,但它适用于域间和进程间的情况。