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
.
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);
and this for setting permissions on a folder :
http://www.redmondpie.com/applying-permissions-on-any-windows-folder-using-c/
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.
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