可靠地检测到我的另一个应用程序正在运行

Ed *_*ess 0 .net c# windows mutex

我有两个应用程序,一个WinForms应用程序和一个Windows服务,它们都运行在同一台机器上.我希望WinForms应用程序能够可靠地检测服务何时运行.我完全控制了两个应用程序的设计和实现.

我的第一个想法是使用Mutex,由服务实例化并由WinForms App检测.

有更好的设计吗?

Mat*_*ley 7

K. Scott Allen 在为此目的使用Mutex 方面做了很好的准备,并且您将遇到GC的问题.

如果我想在机器上的所有会话中只运行一个应用程序实例,我可以将命名的互斥锁放入带有前缀"Global"的全局命名空间.

[STAThread]
static void Main() 
{
   using(Mutex mutex = new Mutex(false, "Global\\" + appGuid))
   {
      if(!mutex.WaitOne(0, false))
      {
         MessageBox.Show("Instance already running");
         return;
      }

      Application.Run(new Form1());
   }
}
Run Code Online (Sandbox Code Playgroud)

编辑: 改变字符串文字使用转义反斜杠代替@,SO语法荧光笔不喜欢逐字字符串.