8

我们在创建Mutex. 问题线是:

MutexAccessRule rule = new MutexAccessRule("Everyone", MutexRights.FullControl, AccessControlType.Allow);

硬编码的“Everyone”字符串仅适用于英文操作系统,我们如何更改此行以使其适用于所有语言?

4

2 回答 2

14

谷歌今天很有帮助:

看起来这会有所帮助

这段代码解决了这个问题:

  SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
  MutexAccessRule rule = new MutexAccessRule(sid, MutexRights.FullControl, AccessControlType.Allow);

VB:

Dim sid As System.Security.Principal.SecurityIdentifier = New System.Security.Principal.SecurityIdentifier(System.Security.Principal.WellKnownSidType.WorldSid, Nothing)
Dim rule As System.Security.AccessControl.MutexAccessRule = New System.Security.AccessControl.MutexAccessRule(sid, System.Security.AccessControl.MutexRights.FullControl, System.Security.AccessControl.AccessControlType.Allow)
于 2008-12-19T22:53:37.850 回答
4

我遇到了同样的问题,但需要“Everyone”组名的实际本地化字符串才能启用对 MessageQueue 的访问。这是我找到的解决方案,效果很好:

SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
var acct = sid.Translate(typeof(NTAccount)) as NTAccount;
myMessageQueue.SetPermissions(acct.ToString(), MessageQueueAccessRights.FullControl); 
于 2014-06-19T13:29:33.633 回答