为什么我的文件在没有限制的情况下由于权限不足(HTTP 错误 500.19)而无法读取?

Why is my file supposedly unable to be read due to insufficient permissions (HTTP Error 500.19), when it has no restrictions on it?

当我尝试 运行 一个 ASP.NET 站点时出现此错误(我第一次尝试将其访问 运行):

然而查看涉及的文件(\C:\EnhancedSalesReporting\customerreportingnet\customerreportingnet\web.config),它似乎没有任何限制/权限不足:

这里真正的问题是什么,或者我必须做什么才能摆脱这个令人沮丧的障碍?

asp.net web.config 500.19 internalservererror configfile insufficientpermissions 权限

更新

当我通过在 IIS 中创建一个虚拟目录,将其指向这些文件的位置,然后在 VS 中选择“文件”>“打开网站...”来以不同的方式处理它时,我的表现也好不到哪儿去,真的。错误页面不同,但我都被困住了。该障碍描述为 here

更新 2

当我尝试按照 the link provided in the comment by Ken White 中接受的答案中的步骤操作时,通过尝试在“安全”选项卡中将 "IIS_IUSRS" 添加到 Web.Config 的组或用户名,我获取“未找到名称 - 无法找到名为 "IIS_IUSRS" 的对象...

我是不是走错了路?无论我尝试通过 Windows Explorer 还是从 IIS7.5 中的“内容视图”窗格编辑 Web.Config,我都会得到相同的结果 - 是否还有其他含义?

更新 3

上面引用的 post 的另一个提示是,“您还应该检查 applicationhost.config 文件 中的只读属性”

这值得一试,但是哪一个呢?我的硬盘上有 9 个 applicationhost.config 个文件,其中四个看起来很有可能,它们位于以下位置:

C:\Program Files (x86)\IIS Express
C:\Program Files\IIS Express
C:\Users\cshannon\MyDocuments\IIS Express
C:\Windows\System32\inetsrv

如果有的话,将 readonly 设置为 false 对哪一个有利?

更新 4

这是对Michael Liu回答的回应:

谢谢,迈克尔;

我按照您的步骤操作,但仍然得到相同的错误页面。我原以为它会起作用,所以我有点惊讶(甚至感到羞愧)我最终得到了相同的旧错误页面。

顺便说一句,我在任务管理器中没有看到 "Details" 选项卡,但是 "Processes" 选项卡中有一个 "Show processes from all users"。

也许这就是问题所在 - 任务管理器中有 三个 w3wp.exe 个条目:

Image Name      User Name
----------      ---------
w3wp.exe *32    DefaultAppPool
w3wp.exe        classicEservice 
w3wp.exe        NETWORK SERVICE

应该只有一个吗?

更新 5

重新启动 IIS7.5 后,我在任务管理器中有 "just" 两个 w3wp.exe 条目:

w3wp.exe *32 (DefaultAppPool)
w3wp.exe (NETWORK SERVICE)

所以 2 是不是太多了?

更新 6

回答 Michael 的更新步骤:

Application Pool == classicEservice

在 "Application Pools" 中,classicEservice 的值是:

Status == Started
.NET Framework Version == v2.0
Managed Pipeline Mode == Classic
Identity == ApplicationPoolIdentity
Applications == 5

再次执行这些步骤,但将 "DefaultAppPool" 替换为 "classicEservice" 绝对让我走上正轨,因为我不再看到 500.19 错误页面。现在是 http://localhost/CustomerReportingNET/pages/custmaint_entry.aspx 上的 "hourglassing"。

我想也许应该去掉“/pages/custmaint_entry.aspx”;我会看看我需要做些什么来实现它...

更新 7

第一次 "hourglassed" 直到奶牛回家,第二次(和第三次)它向我展示了这个:

更新 8

我尝试了 "Start without Debugging" 并剥离了 URL 的后端,这样它就只是“http://localhost/CustomerReportingNET/”,但它仍然是沙漏(或者 "blue spinning donuts" 我猜) 就像一个喝了过量能量饮料的旋转托钵僧。

错误“Cannot read configuration file due to insufficient permissions”表示 IIS worker process w3wp.exe is 运行 under an account that doesn't have permission to access Web.config .实际上,您的 Web.config 文件权限的屏幕截图显示了一组非常严格的帐户。

首先,确定w3wp.exe是哪个账户运行为:

  1. 在 IIS 管理器中,在左侧树中找到并 select 您的虚拟目录。
  2. 在右侧的操作窗格中,单击基本设置
  3. 记下配置的应用程序池,然后单击取消
  4. Select Application Pools 在左侧树中(它应该靠近列表的顶部)。
  5. 在应用程序池列表中,找到您在第 3 步中记下的那个,然后查看 Identity 列中的值。

IIS 7.5 及更高版本(Windows 7,Windows Server 2008 R2)

我假设配置的应用程序池是 DefaultAppPool,它的标识是 ApplicationPoolIdentity,这意味着 IIS 为应用程序池创建了一个 virtual account。 (让我知道它们是否是其他东西。)

您需要允许此虚拟帐户访问您的应用程序文件夹:

  1. 在 Windows 资源管理器中,打开包含 Web.config (C:\EnhancedSalesReporting\customerreportingnet\customerreportingnet) 的文件夹的“属性”对话框。
  2. 安全选项卡上,单击编辑按钮打开权限对话框, 然后单击 添加.
  3. Select Users 对话框中,单击 Locations 按钮,select 您的计算机(可能列表中的第一项,以及屏幕截图中的 IBM-JBAKER),然后单击 确定
  4. Enter the object names to select文本框中, 键入 IIS APPPOOL\DefaultAppPool(没有任何尾随空格),然后单击 确定
    • 或者,您可以通过键入 IIS_IUSRS 来授予对 所有 IIS 虚拟帐户的访问权限。
  5. 返回 Permissions 对话框,Read & executeRead 复选框Allow 列应该已经被选中,因此只需单击 OK

IIS 6.0/7.0(WindowsVista,Windows服务器 2003/2008)

在这些操作系统上,w3wp.exe 作为 "real" 帐户(例如 NETWORK SERVICE)而不是虚拟帐户运行。按照上一节中的步骤进行操作,但在第 4 步中,将任务管理器中显示的实际帐户(或 IIS_WPG)替换为 IIS APPPOOL\DefaultAppPool(或IIS_IUSRS)。