2008-12-19 15 views
7

Tenemos un problema con la forma en que estamos creando un Mutex. El problema es la línea:El nombre del grupo Todos en sistemas operativos no ingleses

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

La cadena codificada "Todo el mundo" sólo funciona en sistemas operativos de Inglés, ¿cómo podemos cambiar esta línea por lo que funciona en todos los idiomas?

Respuesta

12

Google está siendo útiles hoy en día:

Parece que this will help

Este código resuelve este problema:

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) 
3

que tenía el mismo problema, pero necesitaba la cadena localizada real del nombre del grupo "Todos" para habilitar acceso a un MessageQueue. Aquí está la solución que encontré, que funciona bien:

SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null); 
var acct = sid.Translate(typeof(NTAccount)) as NTAccount; 
myMessageQueue.SetPermissions(acct.ToString(), MessageQueueAccessRights.FullControl); 
Cuestiones relacionadas