我正在尝试在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 \ <!> lt;我的文件夹<!> gt;我可以手动更改它的权利。

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

有帮助吗?

解决方案

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

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

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

其他提示

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top