System.ArgumentNullException bei neuer MutexAccessRule
Posted: 03 Jan 2025, 07:23
Ich habe eine Erkennungsfunktion für „einzelne Anwendungsinstanzen“, die den „klassischen“ Mutex-Ansatz verwendet:
Bis jetzt hat es gut funktioniert.
Vor kurzem bekam ich eine System.ArgumentNullException: „Der Wert darf nicht null sein.“ (Parameter 'identity')' in der neuen MutexAccessRule-Zeile.
Seltsamerweise ist der Identitätswert NICHT null.
Ich habe es auch versucht Erstellen der Identität mit diesen Elementen ohne Erfolg:
Und auch dieser Weg ist fehlgeschlagen:
... oder ...
Ich vermute, dass der Fehler nach der letzten System.Security.Principal.Windows-Paketaktualisierung aufgetreten ist, aber jetzt kann ich die ältere Version nicht installieren...
Bearbeiten:
Das Paket, von dem ich vermutete, dass es fehlschlägt, war: System.Threading. AccessControl.
Die Version vor dem Update war 8.0.0 und Nach dem Update auf 9.0.0 konnte ich endlich zur alten Version 8.0.0 zurückkehren und die Ausnahme war verschwunden. Alles ist wieder in Ordnung.
Ich werde einen Fehlerbericht einreichen.
Code: Select all
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);
Vor kurzem bekam ich eine System.ArgumentNullException: „Der Wert darf nicht null sein.“ (Parameter 'identity')' in der neuen MutexAccessRule-Zeile.
Seltsamerweise ist der Identitätswert NICHT null.
Ich habe es auch versucht Erstellen der Identität mit diesen Elementen ohne Erfolg:
Code: Select all
identity = WindowsIdentity.GetCurrent().Owner;
identity = WindowsIdentity.GetCurrent().Owner.AccountDomainSid;
identity = new SecurityIdentifier(WellKnownSidType.BuiltinDomainSid, null);
identity = new SecurityIdentifier(WellKnownSidType.NTAuthoritySid, null);
Code: Select all
string user = Environment.UserDomainName + "\\" + Environment.UserName;
var allowEveryoneRule = new MutexAccessRule(user, MutexRights.FullControl, AccessControlType.Allow);
Code: Select all
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);
Bearbeiten:
Das Paket, von dem ich vermutete, dass es fehlschlägt, war: System.Threading. AccessControl.
Die Version vor dem Update war 8.0.0 und Nach dem Update auf 9.0.0 konnte ich endlich zur alten Version 8.0.0 zurückkehren und die Ausnahme war verschwunden. Alles ist wieder in Ordnung.
Ich werde einen Fehlerbericht einreichen.