2

我正在尝试在 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> 中,我可以手动更改它的权限就好了。

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

4

2 回答 2

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

在那之后,每件事似乎都在工作。

于 2008-10-28T20:43:00.953 回答
1

这可能是一个愚蠢的问题,但您是否尝试过手动执行相同的操作(例如使用资源管理器)?Vista 有一些目录,即使是管理员组中的用户也无法在不采取额外步骤的情况下进行修改。我认为您首先需要采取两个步骤。

首先,使用 Explorer 对代码进行相同的修改。如果失败,请排除故障。

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

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

于 2008-10-28T16:54:30.370 回答