You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中创建仅管理员拥有完全控制权限的目录

C# 实现目录仅管理员完全控制的方案

核心实现逻辑

通过操作目录的访问控制列表(ACL)完成权限配置,核心步骤为:禁用父目录权限继承、清除所有非管理员权限规则、为管理员组授予完全控制权限,可额外配置隐藏属性达到类似隐藏文件夹的效果。

前置依赖

需要引入以下命名空间:

using System.IO;
using System.Security.AccessControl;
using System.Security.Principal;

完整代码示例

public static void CreateProtectedDirectory(string dirPath)
{
    // 目录不存在则创建
    if (!Directory.Exists(dirPath))
    {
        Directory.CreateDirectory(dirPath);
    }

    // 获取目录安全对象
    DirectorySecurity dirAcl = Directory.GetAccessControl(dirPath);

    // 禁用权限继承,同时删除所有继承得到的权限
    dirAcl.SetAccessRuleProtection(isProtected: true, preserveInheritance: false);

    // 清除所有现有显式权限
    var existingRules = dirAcl.GetAccessRules(true, false, typeof(SecurityIdentifier));
    foreach (FileSystemAccessRule rule in existingRules)
    {
        dirAcl.RemoveAccessRule(rule);
    }

    // 为本地管理员组添加完全控制权限,兼容多语言系统无需硬编码组名
    var adminSid = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
    var adminPermission = new FileSystemAccessRule(
        adminSid,
        FileSystemRights.FullControl,
        InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
        PropagationFlags.None,
        AccessControlType.Allow
    );
    dirAcl.AddAccessRule(adminPermission);

    // 可选:为当前登录的管理员用户添加权限,避免UAC虚拟化导致的访问异常
    var currentUser = WindowsIdentity.GetCurrent();
    if (currentUser.Owner != adminSid)
    {
        var currentAdminPermission = new FileSystemAccessRule(
            currentUser.Owner,
            FileSystemRights.FullControl,
            InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
            PropagationFlags.None,
            AccessControlType.Allow
        );
        dirAcl.AddAccessRule(currentAdminPermission);
    }

    // 应用ACL配置到目录
    Directory.SetAccessControl(dirPath, dirAcl);

    // 可选:设置目录为隐藏属性
    var dirInfo = new DirectoryInfo(dirPath);
    dirInfo.Attributes |= FileAttributes.Hidden;
}

注意事项

  • 程序运行时必须拥有管理员权限才能修改ACL配置,建议在程序的app.manifest中配置执行级别为requireAdministrator,避免权限不足报错。
  • 若需要退而求其次为非管理员用户开放只读权限,只需额外添加Users组的只读规则即可,示例如下:
var usersSid = new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null);
var usersReadPermission = new FileSystemAccessRule(
    usersSid,
    FileSystemRights.ReadAndExecute,
    InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
    PropagationFlags.None,
    AccessControlType.Allow
);
dirAcl.AddAccessRule(usersReadPermission);
  • 目录下新创建的文件和子目录会自动继承当前配置的权限,无需单独设置。

内容的提问来源于stack exchange,提问作者rlnnclt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:45:04