在我拔掉剩下的头发之前,我想听听一些关于这方面的意见。
我正在尝试取得一个文件夹的所有权。我当然以管理员身份运行该程序,并且我确实有权获得所有权,因为我可以在资源管理器中更改所有者。
但是,如果管理员或我的帐户拥有它,我可以更改所有者,如果我已经拥有所有权,我可以更改权限。
如果我试图给自己一个文件的所有权,比如说属于 SYSTEM,那么我会得到一个未经授权的异常。
我已经用访问控制方法尝试了一些不同的东西,但没有任何效果,我认为这个最新的方法直接来自书本。
private static void makePerm(string file, NTAccount account)
{
FileInfo finfo = new FileInfo(file);
FileSecurity fsecurity = finfo.GetAccessControl();
//also tried it like this //fsecurity.ResetAccessRule(new FileSystemAccessRule(string.Format(@"{0}\{1}", Environment.UserDomainName.ToString(), Environment.UserDomainName.ToString()), FileSystemRights.FullControl, AccessControlType.Allow));
fsecurity.SetOwner(account);
finfo.SetAccessControl(fsecurity);
}
顺便说一下,我正在 Windows 7 上尝试这个。
我在这里缺少什么?
最佳答案
我遇到了同样的问题,只是在这里发布给可能像我一样来这里搜索的其他人:
您需要在代码中显式启用 SeTakeOwnershipPrivilege,正如 Luke 上面提到的那样。我找到了这个 Process Privileges对处理这类事情很有帮助。
这是它修复我的代码的方法:
using System;
using System.Diagnostics;
// ...
using (new ProcessPrivileges.PrivilegeEnabler(Process.GetCurrentProcess(), Privilege.TakeOwnership))
{
directoryInfo = new DirectoryInfo(path);
directorySecurity = directoryInfo.GetAccessControl();
directorySecurity.SetOwner(WindowsIdentity.GetCurrent().User);
Directory.SetAccessControl(path, directorySecurity);
}
关于c# - 获得文件或文件夹的所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5368825/