3

我在(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。同样,这是它抱怨的子文件夹。

4

0 回答 0