创建互斥锁时出现UnauthorizedAccessException

时间:2011-06-07 14:48:51

标签: .net multithreading winapi mutex

给出以下使用互斥锁的代码:

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相关的权限。

1 个答案:

答案 0 :(得分:1)

我怀疑它不是Mutex权限,而是在Global \ namespace(SeCreateGlobalPrivilege)中创建对象的权利。

此外,如果此代码几乎可以在同一时间由多个进程调用 - 您可以在此处获得竞争条件。