2010-05-09 8 views
8

Ich verwende den folgenden einfachen Code, um einem Verzeichnis die volle Kontrolle hinzuzufügen, aber es funktioniert nicht.Wie setze ich die volle Kontrolle auf ein Verzeichnis?

 String dir_name = @"folder_full_path"; 
     DirectorySecurity dir_security = Directory.GetAccessControl(dir_name); 
     FileSystemAccessRule access_rule = new FileSystemAccessRule(@"AccountName", 
      FileSystemRights.FullControl, AccessControlType.Allow); 
     dSecurity.AddAccessRule(access_rule); 
     Directory.SetAccessControl(dir_name, dir_security); 

Aber dieser Code nur gesetzt spezielle Berechtigungen in den Zielordner. Dieser Code ist fast der gleiche wie der MSDN sample. Ich kratze mich am Kopf für eine vernünftige Erklärung ... Hoffe, dass jemand etwas Licht auf mich werfen könnte.

Vielen Dank.

+4

Was passiert, wenn Sie den 5-Parameter-Konstruktor verwendet für FileSystemAccessRule stattdessen? http://msdn.microsoft.com/en-us/library/sfe70whw.aspx –

+3

Dank Ben. Ich könnte jetzt mit dem 5-Parameter-Konstruktor fertig werden. Aber ich weiß nicht, warum der 3-Parameter-Konstruktor existiert, wenn es einfach nicht funktioniert? – smwikipedia

Antwort

-3

:) Drehen Sie sich um.

  • Erstellen Sie ein Verzeichnis.

  • Berechtigungen zuweisen.

  • lesen Directory ACL und prüfen Sie im Debugger, wie es aussieht;)

Voila.

13

Nach einigem Reverse Engineering der ursprünglichen ACL-Regeln habe ich es mit dem folgenden Code zu arbeiten:

IdentityReference everybodyIdentity = new SecurityIdentifier(WellKnownSidType.WorldSid, null); 

FileSystemAccessRule rule = new FileSystemAccessRule(
    everybodyIdentity, 
    FileSystemRights.FullControl, 
    InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, 
    PropagationFlags.None, 
    AccessControlType.Allow); 

kann es keine weiteren Besuchern hilft :)

+0

Danke, ich glaube, das ist die 5-Parameter-Version. – smwikipedia

+0

Funktioniert perfekt, danke! – Despertar

+1

+1 für den WellKnownSidType. Ich benötige das Administratorkonto in meinem Programm. – 010110110101

Verwandte Themen