设置目录的访问权限 - 接收异常“无法设置标志”

时间:2009-01-19 11:25:03

标签: c# security

我正在尝试编程允许对目录上的ASPNET帐户进行写访问。我使用以下代码执行此操作:(请注意,我希望ASPNET的“允许写入访问”也传播到子对象:

static void Main(string[] args)
            {


                FileSecurity fileSecurity;

                fileSecurity = new FileSecurity();

                fileSecurity.SetAccessRuleProtection(true, false);

                fileSecurity.AddAccessRule(new FileSystemAccessRule("ASPNET",FileSystemRights.Write,InheritanceFlags.ObjectInherit|InheritanceFlags.ContainerInherit,PropagationFlags.InheritOnly,AccessControlType.Allow));                                   

                File.SetAccessControl("C:\\TestDir1", fileSecurity);
            }

此代码导致异常:“无法设置标志。\ r \ nParameter name:inheritanceFlags”

可能出现什么问题?

2 个答案:

答案 0 :(得分:9)

得到了解决方案,显然我必须这样做:

DirectoryInfo dirInfo = new DirectoryInfo("C:\\TestDir2");
            DirectorySecurity dirSecurity = dirInfo.GetAccessControl();

            dirSecurity.AddAccessRule(new FileSystemAccessRule("ASPNET", FileSystemRights.Write|FileSystemRights.DeleteSubdirectoriesAndFiles, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow));


            dirInfo.SetAccessControl(dirSecurity); 

答案 1 :(得分:2)

正如您所指出的,最初的问题是您使用FileSecurity类(适用于文件,而不是目录)并尝试为目录设置ACL,但这可能会发生在任何以下原因:

  1. 目录设置规则时,请指定 InheritanceFlags.None作为继承标志,但提供任何标志 传播标志的值不是PropagationFlags.None (你不能传播不存在的继承)。
  2. 文件设置规则时,请指定除以外的任何值 InheritanceFlags.NonePropragationFlags.None 各自的参数(文件不是容器,所以继承 无法指定)。
  3. 您可以在source for the CheckFlags method中看到.NET Framework所做的相关检查。