如何在C#中无需调用icacls实现文件夹权限继承禁用?
在C#中禁用文件夹的文件系统权限继承
要实现和icacls "..." /inheritance:r相同的效果(禁用权限继承并移除已继承的权限),可以直接使用.NET框架中的DirectorySecurity类操作,无需调用外部命令。
实现步骤与代码示例
using System; using System.IO; using System.Security.AccessControl; class FolderPermissionHandler { static void Main(string[] args) { string targetFolder = @"C:\Your\Target\Folder"; try { // 获取目标文件夹的安全配置对象 DirectorySecurity dirSecurity = Directory.GetAccessControl(targetFolder); // 禁用权限继承并移除已继承的权限(对应icacls /inheritance:r) // 参数1设为true:开启保护(禁用继承) // 参数2设为false:不保留已继承的权限条目 dirSecurity.SetAccessRuleProtection(true, false); // 将修改后的安全配置应用到目标文件夹 Directory.SetAccessControl(targetFolder, dirSecurity); Console.WriteLine("权限继承已成功禁用,且已移除原有继承权限"); } catch (UnauthorizedAccessException) { Console.WriteLine("当前权限不足,无法修改文件夹安全设置"); } catch (DirectoryNotFoundException) { Console.WriteLine("目标文件夹不存在"); } catch (Exception ex) { Console.WriteLine($"操作失败:{ex.Message}"); } } }
关键说明
SetAccessRuleProtection是核心方法:- 若将第二个参数改为
true,则对应icacls /inheritance:d的效果——禁用继承但保留已有的继承权限条目。
- 若将第二个参数改为
- 运行程序需要足够权限:通常需要管理员权限,或当前用户拥有目标文件夹的「更改权限」权限。
内容的提问来源于stack exchange,提问作者Sebastian Achorner
相关产品推荐
相关产品推荐

