2010-09-20 69 views
4

我在创建具有特定权限的目录时遇到了问题。创建目录并给予用户FullControl问题

 //Make sure Tools directory exists 
     DirectoryInfo oMyDirectoryInfo = new DirectoryInfo(oInstance.szToolsPath); 
     if (!oMyDirectoryInfo.Exists) 
     { 
      oMyDirectoryInfo.Create(); 
      DirectorySecurity oDirectorySecurity = oMyDirectoryInfo.GetAccessControl(); 
      oDirectorySecurity.AddAccessRule(new FileSystemAccessRule((Settings.Default.LoginDomain + "\\" + Settings.Default.LoginUsername), FileSystemRights.FullControl, InheritanceFlags.ContainerInherit, PropagationFlags.InheritOnly, AccessControlType.Allow)); 
      oMyDirectoryInfo.SetAccessControl(oDirectorySecurity); 
     } 

现在创建目录,我可以看到登录已被添加到安全选项卡。但是,当我模拟登录并尝试将文件复制到该目录时,我收到未授权的异常。我可以创建一个文件(无数据),我可以创建一个文件夹,但我不能将数据写入文件(但我设置了FullControl:/)

我通过Windows挖掘了更多权限,我发现它适用于子文件夹,但我想将其设置为文件。我如何通过代码来做到这一点?

这是Windows 7

+0

此代码是否在禁用UAC的管理员用户帐户下运行? – 2010-09-20 12:54:47

+0

是UAC已禁用 – Oliver 2010-09-20 13:16:58

回答

6

当你创建FileSystemAccessRule,您指定InheritanceFlags.ContainerInherit。这将掩码传播给子容器容器。如果您要应用到叶对象(在你的情况的文件),你需要指定InheritanceFlags.ObjectInherit,或两者兼有,

InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit 
+0

您真棒!谢谢。 – Oliver 2010-09-20 13:12:31

0

使用该添加访问规则

string adminUserName = Environment.UserName; 
      DirectorySecurity dirService = Directory.GetAccessControl(directory + hexID); 
      FileSystemAccessRule fsa = new FileSystemAccessRule(adminUserName,FileSystemRights.FullControl, AccessControlType.Deny); 

      dirService.AddAccessRule(fsa);//add 
      Directory.SetAccessControl(directory + hexID, dirService); 

,并用它来去除访问规则

string adminUserName = Environment.UserName; 
      DirectorySecurity dirService = Directory.GetAccessControl(directory + hexID); 
      FileSystemAccessRule fsa = new FileSystemAccessRule(adminUserName, FileSystemRights.FullControl, AccessControlType.Deny); 

      dirService.RemoveAccessRule(fsa);//remove 
      Directory.SetAccessControl(directory + hexID, dirService);