我正在尝试编程允许对目录上的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”
可能出现什么问题?
答案 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,但这可能会发生在任何以下原因:
InheritanceFlags.None
作为继承标志,但提供任何标志
传播标志的值不是PropagationFlags.None
(你不能传播不存在的继承)。InheritanceFlags.None
和PropragationFlags.None
各自的参数(文件不是容器,所以继承
无法指定)。您可以在source for the CheckFlags method中看到.NET Framework所做的相关检查。