2011-03-20 42 views
7

在我拔出其余的头发之前,我想就此获得一些输入。
我试图获得一个文件夹的所有权。我当然是以管理员身份运行该程序,因为我可以更改资源管理器中的所有者,所以我有权利拥有所有权。取得文件或文件夹的所有权

但是,如果管理员或我的帐户拥有它,我可以更改所有者,如果我已拥有所有权,则可以更改权限。
如果我试图让自己拥有一个文件,让我们说拥有SYSTEM,那么我得到一个未授权的指示。

我已经尝试了一些与accesscontrol方法不同的东西,但没有任何工作,这个最新的方法我认为是直接由本书。

 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 btw上这个。
我在这里错过了什么?

+0

你似乎什么缺少的是系统级别高于你和管理员。 – 2011-03-20 13:59:52

+0

您确定您可以通过系统拥有的文件获取资源管理器中的所有权吗?你似乎这样说,但太明确。 – 2011-03-20 14:01:46

+0

是啊我知道,但为什么我可以在资源管理器中将系统所有者从系统更改为管理员,但是不能使用代码? AFAIK管理员可以始终拥有任何东西。 – 2011-03-20 14:02:27

回答

1

您是否首先通过UAC提升您的流程?在Windows 7上,如果没有UAC升级,您的进程将使用权限较低的令牌运行。

+0

是的。我都用提升的权限运行visual studio,我试图手动运行exe作为admnistrator。 – 2011-03-20 14:06:36

+1

您可能还需要明确启用SeTakeOwnershipPrivilege。 – Luke 2011-03-20 14:47:04

8

我有同样的问题,只是在这里发帖给其他人谁可以来这里寻找和我一样:

您需要明确启用SeTakeOwnershipPrivilege代码卢克上面提到。我发现这个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);  
} 
+1

我知道这有点旧,但我面临同样的问题。感谢分享这个解决方案,它适应了我的需要。如果有人想让别人成为主人:那么您还需要特权Privilege.Restore。在您将能够更改所有者之前。如果你想获得所有权,你可能首先需要创建一个新的FileSecurity对象,取得所有权,然后从那里继续: 'var fileSecurity = new FileSecurity();' 'fileSecurity.SetOwner(_owner); ' 'File.SetAccessControl(file,fileSecurity);' – philip 2014-08-19 15:54:27

+0

@philip感谢分享更新&很高兴我可以提供帮助。 – Maverik 2014-08-19 16:19:45

相关问题