在Vista上设置文件夹权限

时间:2008-10-28 16:43:37

标签: c# security file-permissions

我正在尝试在vista计算机上设置文件夹及其所有子项的权限。我到目前为止的代码就是这个。

 public static void SetPermissions(string dir)
        {
            DirectoryInfo info = new DirectoryInfo(dir);
            DirectorySecurity ds = info.GetAccessControl();            
            ds.AddAccessRule(new FileSystemAccessRule(@"BUILTIN\Users", 
                             FileSystemRights.FullControl, 
                             InheritanceFlags.ContainerInherit,
                             PropagationFlags.None, 
                             AccessControlType.Allow));

            info.SetAccessControl(ds);            
        }

然而,它并没有像我期望的那样发挥作用 即使我以管理员身份运行代码,它也不会设置权限。

我正在使用的文件夹位于C:\ ProgramData \< my folder>我可以手动更改它的权利。

任何人都想指出我正确的方向。

2 个答案:

答案 0 :(得分:6)

所以答案是双重的。首先在文件夹上设置权限之前创建一个子文件夹,然后我需要或者在权限上再写一个标志,以便文件夹和文件继承权限。

public static void SetPermissions(string dir)
        {
            DirectoryInfo info = new DirectoryInfo(dir);
            DirectorySecurity ds = info.GetAccessControl();            
            ds.AddAccessRule(new FileSystemAccessRule(@"BUILTIN\Users", 
                             FileSystemRights.FullControl,
                             InheritanceFlags.ObjectInherit |
                             InheritanceFlags.ContainerInherit,
                             PropagationFlags.None,
                             AccessControlType.Allow));
            info.SetAccessControl(ds);            
        }

之后,每件事似乎都有效。

答案 1 :(得分:1)

这可能是一个愚蠢的问题,但您是否尝试过手动执行相同的操作(例如使用资源管理器)? Vista有一些目录甚至管理员组中的用户都无法修改而无需采取其他步骤。我认为你需要先采取两个步骤。

首先,使用资源管理器对您在代码中尝试进行相同的修改。如果失败,请对其进行故障排除。

其次,在您自己的用户文件夹下创建的目录上测试您的代码。你不应该需要管理员权限来做到这一点;登录帐户应该能够在例如文件夹下更改ACL。 C:\ Users \用户提供yourname \文件

我还会逐步调试调试器中的代码,并在调用SetAccessControl之前查看“ds”对象。这可能会让你意想不到的东西让你走上正确的道路。