UnauthorizedAccessException при создании мьютекса - PullRequest
3 голосов
/ 07 июня 2011

Учитывая следующий фрагмент кода, который использует 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 Ответ

1 голос
/ 09 июня 2011

Я подозреваю, что это не права Mutex, а право создавать объекты в Global \ namespace (SeCreateGlobalPrivilege).

Кроме того, если этот код может быть вызван несколькими процессами одновременно, вы можете получить условие состязания здесь.

...