2012-08-31 12 views
5

La siguiente función funciona en Windows XP, ahora la intento con Windows 7, devuelve el error IdentityNotMappedException ¿qué ocurre? También he cambiado la aplicación requestedexecutionlevel a admin.Establecer la regla de acceso a archivos

private static void file_accessdeny(string fileName) 
{ 
    try 
    { 
     System.Security.AccessControl.FileSecurity accessdeny = System.IO.File.GetAccessControl(fileName); 
     accessdeny.SetAccessRule(new System.Security.AccessControl.FileSystemAccessRule("Everyone", System.Security.AccessControl.FileSystemRights.FullControl, System.Security.AccessControl.AccessControlType.Deny)); 
     System.IO.File.SetAccessControl(fileName, accessdeny); 
    } 
    catch (System.Exception E) 
    { 
     Console.WriteLine(E.Message); 
     System.Windows.Forms.MessageBox.Show(E.Message, "access deny"); 
    } 
} 

error: System.Security.Principal.IdentityNotMappedException: Algunas o todas las referencias de identidad no pudieron traducirse

+2

¿Es usted la instalación de Windows 7 usando el mismo lenguaje que el XP? ... use una referencia de identidad en lugar de la cadena "Todos" ... para que no tenga que preocuparse por la cultura en uso en ese momento. Puede usar el conocido SID para todos ... SID = "S-1-1-0" –

Respuesta

9

probar este lugar en el código:

accessdeny.SetAccessRule(
    new System.Security.AccessControl.FileSystemAccessRule(
    new SecurityIdentifier(WellKnownSidType.WorldSid, null), 
    System.Security.AccessControl.FileSystemRights.FullControl, 
    System.Security.AccessControl.AccessControlType.Deny)); 

El mensaje de error dice "no se pudo traducir" - esto es Windows que le dice que cuando trató de encontrar un SID para el grupo "Todos" (es decir, traducir) ... no pudo encontrarlo con ese nombre.

Una razón para eso es cuando está ejecutando Windows bajo una configuración regional diferente. Por ejemplo, en alemán, el grupo se llama "Jeder".

Cuestiones relacionadas