如何从不存在的用户拥有的文件夹中删除ACL

时间:2012-07-15 10:46:44

标签: c# .net windows acl

我正在开发一个C#应用程序。

我需要更改文件夹上的ACL,为此我运行我的程序作为提升管理员,一切正常。

问题是,如果拥有该文件夹的用户已从系统中删除,那么当我尝试取得该文件夹的所有权时,我会收到未经授权的异常。

这是失败的代码:

 using (new PrivilegeEnabler(Process.GetCurrentProcess(), Privilege.TakeOwnership))
            {
                var directorySecurity = directoryInfo.GetAccessControl();
                directorySecurity.SetOwner(WindowsIdentity.GetCurrent().User);
                Directory.SetAccessControl(directoryInfo.FullName, directorySecurity);
            }

该行发生异常: directoryInfo.GetAccessControl();

PrivilegeEnabler是Process Privileges中定义的类,它用于获取文件的所有权。

1 个答案:

答案 0 :(得分:3)

我找到了解决方案。

您需要通过创建新的访问控制(不调用GetAccessControl)并将所有者设置为当前进程来设置所有者。 然后你可以用文件做任何你想做的事。

using (new PrivilegeEnabler(Process.GetCurrentProcess(), Privilege.TakeOwnership))
            {
                //create empty directory security
                var directorySecurity = new DirectorySecurity();
                //set the directory owner to current user
                directorySecurity.SetOwner(WindowsIdentity.GetCurrent().User);
                //set the access control
                Directory.SetAccessControl(directoryInfo.FullName, directorySecurity);
            }