给出以下使用互斥锁的代码:
string mutexName = @"Global\MyMutex";
try
{
_mutex = Mutex.OpenExisting(mutexName, MutexRights.Synchronize);
}
catch (WaitHandleCannotBeOpenedException)
{
SecurityIdentifier securityIdentifier = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
MutexSecurity mutexSecurity = new MutexSecurity();
mutexSecurity.AddAccessRule(new MutexAccessRule(securityIdentifier, MutexRights.Synchronize, AccessControlType.Allow));
bool dummy = false;
// Creates the internal Mutex without taking ownership on it.
_mutex = new Mutex(false, mutexName, out dummy, mutexSecurity);
}
对于我的一些用户,当创建Mutex时(在catch块中),会抛出UnauthorizedAccessException。我正试图找到造成这种异常的原因。
消息是
拒绝访问“Global \ MyMutex”路径。
我知道有些问题的用户不是他们电脑的管理员。 我在MSDN上阅读过Mutex和MutexAccessRule,但我不清楚在哪里可以为给定用户分配或查看与Mutex相关的权限。
答案 0 :(得分:1)
我怀疑它不是Mutex权限,而是在Global \ namespace(SeCreateGlobalPrivilege)中创建对象的权利。
此外,如果此代码几乎可以在同一时间由多个进程调用 - 您可以在此处获得竞争条件。