在Vista上设置文件夹权限
问题描述:
我试图在Vista计算机上设置文件夹及其所有子项的权限。我到目前为止的代码是这样的。在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 \ <我的文件夹>,我可以手动更改它的权利就好了。
任何人都想指向正确的方向。
答
所以答案是两倍。首先在文件夹上设置权限之前创建了一个子文件夹,并且我需要或者在权限上添加一个标志,以使文件夹和文件继承权限。
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 \文档。
我还会在调试器中遍历代码,并在您调用SetAccessControl之前查看“ds”对象。这可能会给你带来意想不到的事情,让你走上正确的道路。
是的,我可以创建手动更改文件夹访问权限。 – Erin 2008-10-28 17:06:40