【问题标题】:Negotiate two applications in separate domains协商不同域中的两个应用程序
【发布时间】:2011-12-01 06:44:00
【问题描述】:

如何通知不同域中的另一个应用程序当前正在运行的应用程序已崩溃? 换句话说,是否可以在不同的域中协商两个不同的应用程序?

提前致谢。

【问题讨论】:

    标签: c# .net winforms applicationdomain


    【解决方案1】:

    您可以将命名管道用于此类 IPC。为此,请查看 System.IO.Pipes 命名空间和出色的 NamedsPipeServerStreamNamedPipeClientStream 类。

    请注意,您只能将匿名管道用于同一域内的进程间通信,而您可以将命名管道用于不同域中的 IPC(即跨同一 Intranet 上的 PC)。

    【讨论】:

      【解决方案2】:

      是的,这是可能的。 .NET 类型对此的支持程度取决于您将如何确定“已崩溃”。

      基本上,监控应用程序需要提供适合访问应运行受监控应用程序的系统的凭据。这正是以something like 开头将文件复制到另一个域/从另一个域复制文件的方式:

      net use \\Fileserver1.domain2.com\IPC$ /user:DOMAIN\USER PASSWORD
      

      或其 API 等效项。

      如果您使用 WMI(这是显而易见的方法,很容易通过查询 Win32_Process 列出远程系统上的进程)您可以提供凭据(例如,使用 scripting interfacein .NET) .

      【讨论】:

        【解决方案3】:

        您可以使用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.
        }
        

        这有点小技巧,但它适用于跨域和跨进程的情况。

        【讨论】:

        • “跨域”表示不同的计算机:互斥锁特定于一台计算机。
        • @Richard - 抱歉,我们只是在一台机器上处理AppDomains。
        • 我漏读并因此回答错误问题的问题数量多得令人尴尬……我们都做到了。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-26
        • 1970-01-01
        • 2016-03-25
        • 1970-01-01
        • 1970-01-01
        • 2012-06-14
        相关资源
        最近更新 更多