c# - 带服务和控制台的 System.Threading.Mutex

标签 c# service windows-services console-application mutex

我的程序作为服务或控制台运行。我创建了一个 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。

谢谢, 弗莱迪

最佳答案

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

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

相关文章:

c# - Winform 应用程序在将数据上传到数据库时显示超时过期错误

c# - 从 C# 6 中的响应 header 中删除 SERVER

java - 如何为android绑定(bind)多个不同的服务?

c# - Windows 服务的 ResumeAutomatic 和 ResumeSuspend 模式之间的区别

c# - 从服务启动用户 session 中的进程

c# - Debug.WriteLine() 未命中

c# - CollectionView 与 WPF(或类似的东西)

linux - 如何使用配置文件在 Linux 上作为服务启动

android - 如何在服务中放置一个 onclick 监听器

c# - 我可以关闭对我的代码引用的单个程序集的跟踪吗?