C# 即使操作系统报告存在互斥锁,也找不到互斥锁
我正在windows服务中创建和使用互斥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服务引用了互斥锁 怎么了? 默认行为似乎从本地
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