Как установить ACL папки из C # - PullRequest
3 голосов
/ 02 сентября 2010

Как я могу автоматизировать следующие ручные шаги в C #?

  • Щелкните правой кнопкой мыши папку в проводнике Windows;

    Properties -> Security -> Advanced -> Edit

  • Снимите флажок «Включить наследуемые разрешения от родительского объекта» и нажмите «Удалить».

  • Нажмите кнопку Добавить, выберите группу и предоставьте ей права на изменение.

Я нашел эту статью , которая выглядит именно так, как мне нужно, но у меня нет и не могу найти Microsoft.Win32.Security.

Ответы [ 3 ]

4 голосов
/ 02 сентября 2010

проверьте код ниже:

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 голос
/ 31 января 2019

Насколько я понимаю, ACL не являются частью стандарта .Net 2.0, однако, если вы устанавливаете через:

Install-Package Microsoft.Windows.Compatibility -Version 2.0.1 Install-Package 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

1 голос
/ 02 сентября 2010

Я не знаю об этом, но вы сможете сделать это через класс DirectorySecurity в пространстве имен System.Security.AccessControl.

И я полагаю, вы, вероятно,хочу посмотреть также перечисление InheritanceFlags .

...