我在(Server 2003 SP2)文件服务器上有一个文件夹结构,我需要使用 C# 删除它。我不能这样做,因为我得到System.UnauthorizedAccessException: Access to the path '\\xyz\blah\...' is denied.
(路径指向子文件夹的位置),因为子文件夹的权限不正确。因此,我一直在尝试获取文件的所有权,但失败了System.UnauthorizedAccessException:
,现在我被卡住了。
细节
我有一个管理员工具,供拥有最少权限的用户使用。他们需要删除他们无权访问的文件夹和文件,所以我编写了一个调用 Web 服务的 UI。Web 服务在具有域帐户的 AppPool 下运行,该域帐户(现在)是文件服务器上管理员的成员,因此它应该有权删除文件和文件夹。但有些文件夹的权限不正确。例如,当我使用管理员帐户登录文件服务器并打开文件夹的安全选项卡时,我看到:
对于这些文件夹,我的代码不起作用。
我已经使用本地安全策略在 Web 服务器上为 appPool 帐户“获取文件或其他对象的所有权”。其他帖子(例如这个)指出您需要SeTakeOwnershipPrivilege
在代码中显式启用并推荐我在我的 Web 服务中使用的Process Privileges :
using (new PrivilegeEnabler(process, Privilege.TakeOwnership))
{
System.Diagnostics.Debug.WriteLine(String.Format(
"Privilege:TakeOwnership status: {0}.",
process.GetPrivilegeState(Privilege.TakeOwnership)));
SetFolderOwnerToCurrentUser(folderName, groupName);
}
当我运行它时,我看到:
特权:TakeOwnership 状态:已启用。
(在通过 LSP 添加 priv 之前,我看到了Privilege:TakeOwnership status: Removed.
)
如果SetFolderOwnerToCurrentUser
我只是使用
var directorySecurity = new System.Security.AccessControl.DirectorySecurity();
directorySecurity.SetOwner(WindowsIdentity.GetCurrent().User);
System.IO.Directory.SetAccessControl(folderPath, directorySecurity);
我也得到System.UnauthorizedAccessException: Access to the path '\\fs\blah' is denied
。同样,这是它抱怨的子文件夹。