3

我正在开发一个 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中定义的一个类,它用于获取文件的所有权。

4

1 回答 1

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);
            }
于 2012-07-15T13:32:05.800 回答