创建目录并给用户完全控制权限问题

4

我在创建具有特定权限的目录时遇到了问题。

        //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);
        }

现在这个操作创建了一个目录,我可以看到Login已被添加到安全选项卡中。但是当我模拟该登录并尝试将文件复制到该目录时,会出现未经授权的异常。我可以创建一个空文件夹,但是我不能向文件写入数据(虽然我设置了FullControl :/)。
我进一步查看了Windows的权限设置,发现它适用于子文件夹,但我想将其设置为适用于文件。我该如何通过代码实现这一点?
这是在Windows 7上进行的操作。

这段代码是否在使用已禁用UAC的管理员用户帐户运行? - Hans Passant
2个回答

6

当您创建FileSystemAccessRule时,您正在指定InheritanceFlags.ContainerInherit。这会将掩码传播到子容器。如果您想应用于叶对象(在您的情况下是文件),则需要指定InheritanceFlags.ObjectInherit,或者同时指定两者。

 InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit 

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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接