【问题标题】:Mutex not found even when OS reports that it exists即使操作系统报告它存在,也找不到互斥锁
【发布时间】:2011-12-09 20:34:43
【问题描述】:

我正在 Windows 服务中创建和使用互斥锁

using(var m = new Mutex(false,"mymutex")
{
    m.WaitOne();
    //to my things for a long time
    m.ReleaseMutex();
 }

在另一个以管理员权限运行的程序上

Mutex.OpenExisting("mymutex")

它抛出互斥体不存在。我可以在资源管理器中看到 windows 服务引用了互斥锁。

怎么了?

【问题讨论】:

  • 您能否将您的服务作为一个普通程序运行(或更改它在 services.msc 中的运行方式以使用您的 Windows 用户凭据)并告诉我们这是否有帮助?我想我知道出了什么问题,我想确认一下
  • 你得到了什么具体的异常?
  • @WiktorZychla 标准的 WaitHandleCannotBeOpenedException

标签: c# .net c#-4.0


【解决方案1】:

Mutex 等操作系统对象具有会话范围。您的服务在会话 0 中运行,因此在桌面会话上运行的进程看不到它的互斥锁。解决方法很简单,将 Global\ 前缀到互斥锁名称。

【讨论】:

    【解决方案2】:

    Ignorance is not bliss. EventWaitHandle.OpenExisting throws WaitHandleCannotBeOpenedException

    看起来默认行为从本地系统帐户更改为用户帐户。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多