执行DirectoryInfo()时的System.UnauthorizedAccessException。来自W3WP的GetFiles() - 为什么?

时间:2018-03-07 18:49:18

标签: c# w3wp unauthorizedaccessexcepti

我正在运行一个ASP.NET webform,它试图使用new DirectoryInfo(path).GetFiles(pattern)获取共享文件夹的内容。应用程序池设置为使用域用户名运行,但在执行时它会模拟我的用户名。我所在的组具有完全控制访问树中所有文件夹的权限,并且完全控制访问共享。另外,我已经Everyone 阅读阅读&执行列出文件夹内容访问文件夹树,然后读取&执行访问共享。

然而,当执行该语句时,我得到System.UnauthorizedAccessException:'Access to the path '\\server\share\sub1\sub2' is denied.

运行SysInternals的Process Monitor,事件显示:

Desired Access: Read Data/List Directory, Synchronize
Disposition:    Open
Options:        Directory, Synchronous IO Non-Alert, Open For Backup
Attributes:     n/a
ShareMode:      Read, Write Delete
AllocationSize: n/a
Impersonating:  <MyUsername>

在同一台服务器上运行命令窗口,获取文件夹的目录列表或访问文件夹中的任何文件时都没有错误。

我错过了什么?

为什么在Process Monitor中查看的响应 ACCESS DENIED ,操作指定为 CreateFile

没有给予Everyone 完全控制(我认为这不会有帮助)我想不到任何更多的授权权限。

注意,我也尝试了Directory.EnumerateFiles(path, pattern),结果相同。

更新

网站上的身份验证为Windows AuthenticationASP.NET impersonation;匿名访问被禁用。特定页面不会覆盖此内容。

2 个答案:

答案 0 :(得分:2)

好像你有一个&#34;双跳&#34;问题

当您对IIS服务器进行身份验证时,第一个是“跳”&#39; 当IIS尝试访问UNC时,是第二跳是不允许的。

IIS无法将您的凭据传递给UNC。

有关更多信息,请参阅此文章

UNC Path Access Denied error

Double Hop Problem

答案 1 :(得分:0)

您获得的结果会有所不同,因为您的权限与IIS中运行您应用的帐户的权限不同。

检查为IIS站点运行应用程序池的帐户,并确保该帐户可以访问您尝试访问的UNC路径。