问题
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