System.ArgumentNullException для нового MutexAccessRuleC#

Место общения программистов C#
Ответить
Anonymous
 System.ArgumentNullException для нового MutexAccessRule

Сообщение Anonymous »

У меня есть функция обнаружения «одного экземпляра приложения», использующая «классический» подход Mutex:

Код: Выделить всё

var identity = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
var allowEveryoneRule = new MutexAccessRule(identity, MutexRights.FullControl, AccessControlType.Allow);
var securitySettings = new MutexSecurity();
securitySettings.AddAccessRule(allowEveryoneRule);
var mutex = new Mutex(true, __MUTEX_ID, out createdNew);
mutex.SetAccessControl(securitySettings);
До сих пор все работало нормально.

Недавно я начал получать исключение System.ArgumentNullException: «Значение не может быть нулевым. (Параметр 'identity')' в новой строке MutexAccessRule.

Как ни странно, значение идентификатора НЕ равно нулю.
Я тоже попробовал создание личности с помощью этих факторов безуспешно:

Код: Выделить всё

identity = WindowsIdentity.GetCurrent().Owner;

identity = WindowsIdentity.GetCurrent().Owner.AccountDomainSid;

identity = new SecurityIdentifier(WellKnownSidType.BuiltinDomainSid, null);

identity = new SecurityIdentifier(WellKnownSidType.NTAuthoritySid, null);
И еще этот способ не сработал:

Код: Выделить всё

string user = Environment.UserDomainName + "\\" + Environment.UserName;
var allowEveryoneRule = new MutexAccessRule(user, MutexRights.FullControl, AccessControlType.Allow);
... или ...

Код: Выделить всё

SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
var acct = sid.Translate(typeof(NTAccount)) as NTAccount;
var allowEveryoneRule = new MutexAccessRule(acct.ToString(), MutexRights.FullControl, AccessControlType.Allow);
Я подозреваю, что сбой начался после последнего обновления пакета System.Security.Principal.Windows, но теперь я не могу установить старую версию...

Подробнее здесь: https://stackoverflow.com/questions/792 ... accessrule
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»