我在(Server 2003 SP2)文件服务器上有一个文件夹结构,我需要使用C#删除它。我无法做到这一点,因为我得到System.UnauthorizedAccessException: Access to the path '\\xyz\blah\...' is denied.
(路径指向子文件夹),因为子文件夹上的权限不正确。所以,我一直试图取得文件的所有权,而System.UnauthorizedAccessException:
失败了,现在我被卡住了。
详细
我有一个管理工具,用户使用最少的权限。他们需要删除他们无法访问的文件夹和文件,因此我编写了一个调用Web服务的UI。 Web服务在AppPool下运行,域帐户(现在)是文件服务器上Administrators的成员,因此它应该有权删除文件和文件夹。但是有些文件夹的权限不正确。例如,当我使用管理员中的帐户登录文件服务器并打开该文件夹的安全选项卡时,我看到:
对于这些文件夹,我的代码不起作用。
我已经获得了appPool帐户'取得文件或其他对象的所有权'在使用本地安全策略的Web服务器上。其他帖子(例如this one)已指出您需要在代码中明确启用SeTakeOwnershipPrivilege
,并在我的网络服务中使用推荐的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
。同样,它是它所抱怨的子文件夹。