如何从C#设置文件夹ACL

时间:2010-09-02 10:49:51

标签: c# acl ntfs

如何在C#中自动执行以下手动步骤?

  • 在Windows资源管理器中右键单击文件夹;

    Properties -> Security -> Advanced -> Edit

  • 取消勾选“包含此对象父级的可继承权限”,然后单击“删除”。

  • 单击“添加”,选择一个组并授予其“修改权限”。

我找到this article,看起来就像我需要的那样,但我没有找到Microsoft.Win32.Security

3 个答案:

答案 0 :(得分:4)

检查以下代码:

DirectoryInfo dInfo = new DirectoryInfo(strFullPath);

DirectorySecurity dSecurity = dInfo.GetAccessControl();

//check off & copy inherited security setting 
dSecurity.SetAccessRuleProtection(true, true); 

dInfo.SetAccessControl(dSecurity);

http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.objectsecurity.setaccessruleprotection.aspx

这用于设置文件夹的权限:

http://www.redmondpie.com/applying-permissions-on-any-windows-folder-using-c/

答案 1 :(得分:1)

我不知道那个,但你应该可以通过System.Security.AccessControl命名空间中的DirectorySecurity类来做到这一点。

我认为您可能也希望查看InheritanceFlags枚举。

答案 2 :(得分:1)

我的理解是,从2.0开始,ACL并不是.Net Standard的一部分,但是,如果您通过以下方式进行安装:

安装包Microsoft.Windows.Compatibility-版本2.0.1    安装软件包Microsoft.DotNet.Analyzers.Compatibility -Version 0.2.12-alpha

您将获得与您在完整的.Net Framework中习惯的功能相匹配的扩展方法。例如,我需要设置目录安全性,在安装完上述文件后,此代码将编译并警告某些方法在linux或macOS上不可用

 DirectoryInfo dInfo = new DirectoryInfo(strFullPath);
 DirectorySecurity dSecurity = dInfo.GetAccessControl();
 //check off & copy inherited security setting 
 dSecurity.SetAccessRuleProtection(true, true); 
 dInfo.SetAccessControl(dSecurity);

有关更多信息,请参见https://github.com/dotnet/docs/blob/master/docs/core/porting/windows-compat-pack.md