题
我正在尝试在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之前的对象。这可能会让你意想不到的东西让你走上正确的道路。
不隶属于 StackOverflow