"错误:cs0016无法写入输出文件...访问被拒绝"

Man*_*ram 18 iis

如何修复以下错误?

错误:cs0016无法写入输出文件... c:\ Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\sitename\6c57f9d2\bb09b49d\App_global.asax.5odzsyz5.dll'访问被拒绝

use*_*400 28

在这个问题花了好几个小时后,我自己在下面是运行IIS 7.5的Windows 7上的解决方案:

与站点关联的应用程序池标识不是IIS_IUSRS组的成员.要将应用程序池标识添加到组,我使用了以下步骤:

  1. 从开始菜单中选择Run ...输入lusrmgr.msc并单击OK.
  2. 选择组.
  3. 双击IIS_IUSRS组.
  4. 单击添加...按钮.
  5. 单击位置...按钮.
  6. 选择您的计算机名称(它应位于列表顶部),然后单击"确定".
  7. 在"输入要选择的对象名称"下面的文本框中输入:iis apppool\<app pool identity>例如iis apppool\dev
  8. 单击"检查名称"按钮.如果出现"找不到名称"对话框,则验证输入的应用程序池标识是否与该站点关联的应用程序池标识匹配.如果未出现对话框,请单击"确定".

对要添加的每个应用程序池标识重复步骤7到8.单击确定.

现在,应用程序池标识是IIS_IUSRS组的成员,该组应该已经可以访问Temporary ASP.NET Files目录.毕竟我仍然收到错误,我发现(感谢进程监视器)这是因为应用程序池标识无法写入Windows临时目录.为了解决这个问题,我将IIS_IUSRS组添加到具有读/写权限的Windows临时目录中.

  1. 从开始菜单中选择Run ...输入%windir%并单击OK.
  2. 右键单击Temp目录,然后选择"属性".
  3. 单击"安全"选项卡.
  4. 单击编辑...按钮.
  5. 单击添加..按钮.
  6. 单击位置...按钮.
  7. 选择您的计算机名称(它应位于列表顶部),然后单击"确定".
  8. 在"输入要选择的对象名称"下面的文本框中输入:iis_iusrs
  9. 单击"检查名称"按钮.如果出现"找不到名称"对话框,则检查拼写错误.如果未出现对话框,请单击"确定".
  10. 选择添加的IIS_IUSRS组,然后在下面的"每个人的权限"框中选择:允许读取和允许写入
  11. 单击确定.将显示一个对话框,指出"您即将更改系统文件夹上的权限设置,这可能会导致意外的访问问题并降低安全性.您要继续吗?"
  12. 单击是
  13. 单击确定


Jak*_*ako 15

我已经解决了这个问题,将"网络服务"的完全控制设置为系统温度:

C:\ WINDOWS\TEMP

Web服务器报告的错误消息有点误导.希望这可以帮助.


nil*_*oid 13

我有一段时间一直在努力解决这个问题.在Web上找到一些涉及在错误消息中的"Temporary ASP.NET Files"目录上设置权限的解决方案.但即使向"所有人"开放它也行不通.

然后最终通过以下步骤修复它:

  1. 转到此站点的IIS AppPool
  2. 右键单击应用程序池,然后转到"高级设置"
  3. 将身份从"ApplicationPoolIdentity"更改为"NetworkService"

可能还有一些其他必要的步骤,我在进行故障排除时执行了这些步骤,但这是关键步骤.出于某种原因,当"Everyone"为时,App Pool Identity(例如IIS_APPPOOL\SiteName)未被授予访问权限.我相信其他人可以解释为什么会出现这种情况......希望这有助于其他人解决这个令人沮丧的问题.

  • 这不是解决方案,而是一种解决方法。此外,这也违背了IIS的最佳实践,就好像你有多个应用程序池运行在同一个用户上,它们的内存和访问并不是相互隔离的。换句话说,首先最好通过使用不同的应用程序池身份来保持应用程序之间的隔离;其次,最好提供尽可能少的访问权限,并将“本地系统”提供给不需要它的应用程序是“全权委托”。 (3认同)

小智 9

我有同样的问题.找到一种简单的解决方法:在应用程序池的高级设置中将"加载用户配置文件"设置为true.