我正在尝试在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>我可以手动更改它的权利。
任何人都想指出我正确的方向。
答案 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”对象。这可能会让你意想不到的东西让你走上正确的道路。