在我拔出其余的头发之前,我希望得到一些input。
我正在尝试取得一个文件夹的所有权。 我当然是以pipe理员身份运行程序,因为我可以在资源pipe理器中更改所有者,所以我有权利拥有所有权。
但是,如果pipe理员或我的帐户拥有它,我可以更改所有者,如果我已拥有所有权,则可以更改权限。
如果我试图给自己一个文件的所有权,让我们说SYSTEM拥有,那么我得到一个unuthorizedexception。
我已经用访问控制方法尝试了一些不同的东西,但没有任何作用,我认为这个最新的方法是直接的书。
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); }
你是否首先通过UAC提升你的流程? 在Windows 7上,如果没有UAC升级,您的进程将使用权限较低的令牌运行。