C# 在Vista上设置文件夹权限
我试图在vista计算机上设置文件夹及其所有子文件夹的权限。到目前为止,我的代码是这样的C# 在Vista上设置文件夹权限,c#,security,file-permissions,C#,Security,File Permissions,我试图在vista计算机上设置文件夹及其所有子文件夹的权限。到目前为止,我的代码是这样的 public static void SetPermissions(string dir) { DirectoryInfo info = new DirectoryInfo(dir); DirectorySecurity ds = info.GetAccessControl(); ds.AddA
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);
}
然而,它并没有像我期望的那样工作。即使我以管理员身份运行代码,它也不会设置权限
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);
}
我正在使用的文件夹位于C:\ProgramData\中,我可以手动更改它的权限
任何人都想给我指出正确的方向。这可能是一个愚蠢的问题,但您是否尝试过手动执行相同的操作(例如使用资源管理器)?Vista有一些目录,即使是Administrators组中的用户也无法在不采取其他步骤的情况下修改这些目录。我认为你首先需要采取两个步骤 首先,使用资源管理器对代码进行相同的修改。如果出现故障,请对此进行故障排除 其次,在您自己的用户文件夹下创建的目录上测试代码。你不应该需要管理员权限来做这件事;登录帐户应该能够更改文件夹上的ACL,例如c:\Users\yourname\documents
在调用SetAccessControl之前,我还将逐步检查调试器中的代码,并查看“ds”对象。这可能会让你看到一些意想不到的事情,让你走上正确的道路。因此答案是双重的。首先,在对文件夹设置权限之前创建了一个子文件夹,我需要在权限上添加一个或多个标志,以便文件夹和文件都继承权限
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);
}
从那以后,一切似乎都在运转