【问题标题】:Can't set FullControl on directory无法在目录上设置 FullControl
【发布时间】:2011-04-01 09:19:07
【问题描述】:

我正在尝试在 Windows 7 机器上以编程方式为所有人设置 FullControl,但没有成功。

var dirSec = dir.GetAccessControl();
var fsar = new FileSystemAccessRule(
    "Everyone",
    FileSystemRights.FullControl,
    InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
    PropagationFlags.InheritOnly, 
    AccessControlType.Allow);

dirSec.AddAccessRule(fsar);
dir.SetAccessControl(dirSec);

这为所有人组添加了一些权限(列表和读取),但不是完全控制。如果我使用资源管理器编辑安全权限,我可以将其设置为 FullControl。任何想法为什么它失败了?我的尝试没有错误消息。

【问题讨论】:

  • 我的猜测是您的应用程序的进程没有以提升的方式运行,因此您没有适当的权限来修改访问级别。您是否尝试过以管理员身份运行应用程序(右键单击图标,然后从上下文菜单中选择“以管理员身份运行”)?
  • 应用程序以提升的方式运行 - 这就是为什么我无法弄清楚它为什么无法创建完全控制权限的原因。

标签: c# security windows-7


【解决方案1】:

这应该可以正常工作:

    string path = @"C:\test";
    DirectorySecurity ds = Directory.GetAccessControl(path);
    ds.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow));
    Directory.SetAccessControl(path, ds);

如果这不起作用,那么您的应用程序似乎无权提供这种访问规则。尝试实施模拟。这是一个示例:WindowsIdentity Impersonation using C# Code

【讨论】:

    【解决方案2】:
    foreach (FileSystemRights permission in Enum.GetValues(typeof(FileSystemRights)))
    {
        myDirectorySecurity.AddAccessRule(
            new FileSystemAccessRule(user,
                                     permission,
                                     InheritanceFlags.ContainerInherit |
                                         InheritanceFlags.ObjectInherit |
                                         InheritanceFlags.None,
                                     PropagationFlags.None,
                                     AccessControlType.Allow));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      • 1970-01-01
      • 2020-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-13
      相关资源
      最近更新 更多