C# 如何从非现有用户拥有的文件夹中删除ACL
我正在开发一个C#应用程序 我需要更改文件夹上的ACL,为此,我以提升管理员的身份运行我的程序,并且一切正常 问题是,如果拥有该文件夹的用户从系统中被删除,那么当我试图获得该文件夹的所有权时,会出现未经授权的异常 这是失败的代码:C# 如何从非现有用户拥有的文件夹中删除ACL,c#,.net,windows,acl,C#,.net,Windows,Acl,我正在开发一个C#应用程序 我需要更改文件夹上的ACL,为此,我以提升管理员的身份运行我的程序,并且一切正常 问题是,如果拥有该文件夹的用户从系统中被删除,那么当我试图获得该文件夹的所有权时,会出现未经授权的异常 这是失败的代码: using (new PrivilegeEnabler(Process.GetCurrentProcess(), Privilege.TakeOwnership)) { var directorySecurit
using (new PrivilegeEnabler(Process.GetCurrentProcess(), Privilege.TakeOwnership))
{
var directorySecurity = directoryInfo.GetAccessControl();
directorySecurity.SetOwner(WindowsIdentity.GetCurrent().User);
Directory.SetAccessControl(directoryInfo.FullName, directorySecurity);
}
异常发生在以下行:directoryInfo.GetAccessControl()强>
PrivilegeEnabler是中定义的一个类,用于获取文件的所有权。我找到了一个解决方案
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);
}
您需要通过创建新的访问控制(不调用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);
}
你能发布stacktrace和完整的异常消息吗?。简言之,如果您没有读取权限,那么您唯一能做的就是获取所有权。因此,您需要获得所有权,然后读取并更新ACL。我不知道你是否能在C#中方便地做到这一点。解释如何做到这一点的答案。@arx-这正是我所做的,但它失败了。。显然,您可以设置所有权,但无法获得访问控制。我觉得这很奇怪…这是故意的。如果您没有读取ACL的权限,则不能,但为了让管理员重新获得控制权,他们可以获得所有权。