how to set folder ACLs from C#

流过昼夜 提交于 2019-12-21 05:41:19

问题


How can I automate the following manual steps in C#?

  • Right click a folder in Windows Explorer;

    Properties -> Security -> Advanced -> Edit

  • Un-tick "Include inheritable permissions from this object's parent" and click Remove.

  • Click Add, choose a group and grant it Modify rights.

I've found this article, which looks like exactly what i need, but I don't have and cant find Microsoft.Win32.Security.


回答1:


check the code below:

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

and this for setting permissions on a folder :

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




回答2:


I don't know about that one, but you should be able to do that via the DirectorySecurity class in the System.Security.AccessControl namespace.

And I assume you'd probably want to look at the InheritanceFlags enumeration as well.




回答3:


My understanding is that ACLs are not part of .Net Standard as of 2.0, however, if you install via:

Install-Package Microsoft.Windows.Compatibility -Version 2.0.1 Install-Package Microsoft.DotNet.Analyzers.Compatibility -Version 0.2.12-alpha

You will get extensions methods matching what you are accustomed to in full .Net Framework. For example, I need to set directory security, after installing the above, this code compiles with warnings that some of the methods are not available on linux or macOS

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

for more information, see https://github.com/dotnet/docs/blob/master/docs/core/porting/windows-compat-pack.md



来源:https://stackoverflow.com/questions/3626361/how-to-set-folder-acls-from-c-sharp

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!