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