2009-02-03 80 views
2

作为Vista SP1上的提升管理员运行,我的C#应用​​程序尝试使用以下代码设置以下规则。没有产生错误,但是目录的ACL没有任何改变。我错过了什么?为什么我不能在C#中设置这个ACL规则?

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

更新:只需添加以下代码作为_SetAcl方法的最后一行,我的代码是好去。

info.SetAccessControl(acl); 

回答

7

要完成该过程,必须使用修改后的ACL调用DirectoryInfo.SetAccessControl()。

GetAccessControl()确实返回ACL的副本。你可以自由修改它,但是直到你调用SetAccessControl()

+0

D'oh!它才会生效。那样做了。谢谢。 – flipdoubt 2009-02-03 14:33:37

相关问题