2011-04-01 65 views
0

我试图在没有运气的Windows 7上以编程方式为每个人设置FullControl。无法设置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); 

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

+0

我的猜测是,你的应用程序的进程没有运行的升高,所以你没有相应的权限来修改访问级别。您是否尝试以管理员身份运行应用程序(右键单击该图标,然后从上下文菜单中选择“以管理员身份运行”)? – 2011-04-01 09:21:05

+0

应用程序以提升状态运行 - 这就是为什么我无法弄清楚为什么它无法创建完整的控制权限。 – 2011-04-03 01:21:24

回答

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

0
foreach (FileSystemRights permission in Enum.GetValues(typeof(FileSystemRights))) 
{ 
    myDirectorySecurity.AddAccessRule(
     new FileSystemAccessRule(user, 
           permission, 
           InheritanceFlags.ContainerInherit | 
            InheritanceFlags.ObjectInherit | 
            InheritanceFlags.None, 
           PropagationFlags.None, 
           AccessControlType.Allow)); 
}