Не вызывайте утилиту командной строки cacls
, вместо этого используйте .NET API для изменения разрешений.Вызов утилит командной строки всегда следует рассматривать как последний обходной путь для выполнения задач.Гораздо лучше получить прямой доступ к API, предназначенному для программного доступа.
Directory.GetAccessControl(string)
получает текущий ACL. Directory.SetAccessControl(string, DirectorySecurity)
устанавливает ACL.
Как правило, при работе с ACL лучше работать только с предоставлением прав и вообще не использовать флаги запрета.Отрицание BUILTIN\Users
очень широко, и это отрицание отменяет любой грант, предоставленный любому пользователю .Лучше создать ACL, который не предоставляет никаких прав обычным пользователям и дает права только определенным пользователям, которые должны иметь доступ.