Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Vista上设置文件夹权限_C#_Security_File Permissions - Fatal编程技术网

C# 在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

我试图在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);            
        }
然而,它并没有像我期望的那样工作。
即使我以管理员身份运行代码,它也不会设置权限

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);            
        }
从那以后,一切似乎都在运转