如何在Windows中授予文件和文件夹的所有权

时间:2019-04-09 12:16:01

标签: c# windows permissions

我遇到了一个非常棘手的问题,花了我一段时间才能解决。由于99%的互联网都在告诉我这是不可能的,并且我在stackoverflow上找不到答案,因此我决定将其发布在这里。

我试图更改Windows计算机中文件夹/文件的所有权。这不是什么大问题,因为DirectorySecurtiy具有一个不错的功能:“ SetOwner()”。我可以将其用于我的当前帐户,但无法为其他人使用。每次我尝试授予他人所有权时,都会出现以下错误:“不允许安全标识符成为该对象的所有者”。

// Get folder or creates if not exists
DirectoryInfo dInfo = Directory.CreateDirectory(folderPath);

// Get user
IdentityReference user = new NTAccount(username);

// Set owner
DirectorySecurity dSecurity = dInfo.GetAccessControl();
dSecurity.SetOwner(user);
dInfo.SetAccessControl(dSecurity);

因此,如果我想授予自己所有权,但如果我想授予某人所有权,则此代码有效。该怎么办?

1 个答案:

答案 0 :(得分:0)

进一步搜索互联网后,我在以下博客中找到了解决方案:https://fixingitpro.com/2011/07/08/set-owner-with-powershell-%E2%80%9Cthe-security-identifier-is-not-allowed-to-be-the-owner-of-this-object%E2%80%9D/

这很奇怪,我不知道为什么,但是如果您使用unc pathing,它将起作用。

  

UNC名称使用特定的符号标识网络资源。这些名称由三部分组成:主机设备名称,共享名称和可选的文件路径。   这三个元素使用反斜杠组合在一起:\ host-name \ share-name \ file_path

所以过去只对自己有用的东西:D:\ {folderName}必须是:\\ {IP或服务器名} \ d $ \ {foldername}。如果您只测试完全相同的代码,而不使用不同的路径,那么它将起作用。如果有人能向我解释为什么通过普通路径路由回您自己的计算机不起作用的话,那会很好。

别忘了以管理员身份运行您的应用程序