在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”对象。这可能会给你带来意想不到的事情,让你走上正确的道路。

+0

是的,我可以创建手动更改文件夹访问权限。 – Erin 2008-10-28 17:06:40