我的程序作为服务或控制台运行。我创建了System.Threading.Mutex以仅启动两种模式之一。这是我的代码

public class MyServer
{
// Private variable
System.Threading.Mutex serverMutex;

public MyServer ()
{
    bool createdNew;
    ServerMutex = new System.Threading.Mutex(true, "MyServerMutex", out createdNew);
    if (!createdNew)
    {
        throw new Exception("Another server instance is running");
    }
}
}


首先启动控制台,然后再启动另一个控制台,将引发异常。
首先启动服务和控制台不会引发异常。首先启动控制台,然后启动服务。

有任何想法吗?
我想知道是因为我认为它在几个月前实现该功能时已经准备就绪。

我正在使用.NET 4.0。

谢谢,
弗雷迪

最佳答案

可能的问题是因为您的服务在不同的凭据下运行,因此互斥体不会在用户/会话之间“共享”。
您必须在互斥锁名称前加上"Global\"
看这个good post

关于c# - 带有服务和控制台的System.Threading.Mutex,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7672596/

10-16 03:59