2012-08-31 12 views
5

La funzione seguente funziona su Windows XP, ora sto provando con Windows 7 restituisce l'errore IdentityNotMappedException cosa c'è di sbagliato? Ho anche cambiato l'applicazione requestexecutionlevel ad admin.Imposta regola di accesso ai file

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"); 
    } 
} 

Errore: System.Security.Principal.IdentityNotMappedException: Alcuni o tutti i riferimenti di identità non possono essere tradotti

+2

L'installazione di Windows 7 utilizza la stessa lingua di quella XP? ... utilizzare IdentityReference anziché la stringa "Everyone" ... in modo da non doversi preoccupare della cultura in uso al momento. È possibile utilizzare il noto SID per Tutti ... SID = "S-1-1-0" –

risposta

9

Prova a modificare nel codice:

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

Il messaggio di errore dice: "non può essere tradotto" - questo è Windows che ti dice che quando ha cercato di trovare un SID per il gruppo "Tutti" (cioè tradurre) ... non è riuscito a trovarlo con quel nome.

Un motivo è quando si esegue Windows in una diversa localizzazione. Per esempio in tedesco il gruppo si chiama invece "Jeder".