使用mutext检测并调用已启动的进程

时间:2014-04-04 14:38:15

标签: c# mutex

如何使用互斥锁通过GUID查找第一个进程并调用其中的函数? 就像在Web浏览器中,当您尝试第二次启动它时,它只是打开一个新窗口。

// appGuid is const string containing app GUID
using (Mutex mutex = new Mutex(false, "Global\\" + appGuid))
{
    if (!mutex.WaitOne(0, false))
    {
        // CODE TO FIND AND CALL FIRST PROCESS AND THEN EXIT
        Environment.Exit(0);
    }
    else
    {
        App app = new App();
        app.InitializeComponent();
        app.Run();
    }
}

1 个答案:

答案 0 :(得分:1)

我认为有很多方法可以解决" 哦,你打开了第二个实例,但我们只允许一个,所以让你的请求代理到第一个实例&#34 ;问题。

  • 您可以让主机进程正在侦听套接字,并且当互斥锁检测到它已经被打开时,会调用侦听套接字。也许使用像.NET远程一样简单的东西,没有真正需要在这里完整的WCF或原始套接字写作
  • 您还可以拥有共享内存缓冲区并使用共享内存进行写入。但这需要两个进程之间的同步,所以它可能有点混乱
  • 您可以触发文件并让主机进程监听已知位置的文件事件。这可能是最简单,最低技术的解决方案

这3个想法,可能还有更多

但是,如果您只想获取流程信息,为什么不只是按name查找流程?