Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 即使操作系统报告存在互斥锁,也找不到互斥锁_C#_.net_C# 4.0 - Fatal编程技术网

C# 即使操作系统报告存在互斥锁,也找不到互斥锁

C# 即使操作系统报告存在互斥锁,也找不到互斥锁,c#,.net,c#-4.0,C#,.net,C# 4.0,我正在windows服务中创建和使用互斥 using(var m = new Mutex(false,"mymutex") { m.WaitOne(); //to my things for a long time m.ReleaseMutex(); } 在另一个以管理员权限运行的程序上,我可以 Mutex.OpenExisting("mymutex") 而且它抛出的互斥体并不存在。我可以在资源管理器中看到windows服务引用了互斥锁 怎么了? 默认行为似乎从本地

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

using(var m = new Mutex(false,"mymutex")
{
    m.WaitOne();
    //to my things for a long time
    m.ReleaseMutex();
 }
在另一个以管理员权限运行的程序上,我可以

Mutex.OpenExisting("mymutex")
而且它抛出的互斥体并不存在。我可以在资源管理器中看到windows服务引用了互斥锁

怎么了?


默认行为似乎从本地系统帐户更改为用户帐户。

操作系统对象(如互斥对象)具有会话范围。您的服务在会话0中运行,因此其互斥体对于在桌面会话上运行的进程不可见。解决方法很简单,将
Global\
作为互斥体名称的前缀

请将您的服务作为普通程序运行(或更改它在services.msc中的运行方式以使用您的windows用户凭据),并告诉我们这是否有帮助?我想我知道出了什么问题,我想确定你得到了什么特殊的例外情况?@WiktorZychla标准的WaitHandleCannotBeOpenedException