Frage

Beim Laufen als erhöhter admin on Vista SP1, meine C # app versucht folgende Regel mit dem folgenden Code ein. Es wird kein Fehler erzeugt, aber weder ist eine Änderung auf das Verzeichnis des ACL. Was bin ich?

public static void Main( string args[] )
{
    string dirPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Company"), "Product" );
    Directory.Create(dirPath);
    _SetAcl(dirPath, "Users", FileSystemRights.FullControl);
}

private static void _SetAcl(string path, string identity, FileSystemRights rights)
{
    var info = new DirectoryInfo(path);
    var acl = info.GetAccessControl();

    var rule1 = new FileSystemAccessRule(identity, rights, AccessControlType.Allow);
    bool modified;
    acl.ModifyAccessRule(AccessControlModification.Reset, rule1, out modified);

    var inheritanceFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;
    var rule2 = new FileSystemAccessRule(identity, rights, inheritanceFlags,
                                        PropagationFlags.InheritOnly, AccessControlType.Allow);
    acl.ModifyAccessRule(AccessControlModification.Add, rule2, out modified);
}

Update:. Fügen Sie einfach den folgenden Code als die letzte Zeile der _SetAcl Methode, und mein Code ist gut zu gehen

info.SetAccessControl(acl);
War es hilfreich?

Lösung

Um den Prozess zu beenden, müssen Sie DirectoryInfo.SetAccessControl () mit dem modifizierten ACL nennen.

GetAccessControl () gibt wirklich eine Kopie der ACL. Sie sind frei, es zu ändern, aber es wird erst wirksam, wenn Sie SetAccessControl ()

nennen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top