首页 文章

IIS 7:标识'IIS APPPOOLDefaultAppPool'没有足够的权限来访问临时目录

提问于
浏览
3

我在 Windows7 上的 IIS 7.0 有一个奇怪且无法解决的问题。
我尝试在我的本地测试服务器上运行站点并获得以下错误:

Access to the temp directory is denied.  
Identity 'IIS APPPOOL\DefaultAppPool' under  
which XmlSerializer is running does not have sufficient permission  
to access the temp directory.  

CodeDom will use the user account the process is using to do the compilation,  
so if the user doesn't have access to system temp directory,  
you will not be able to compile.  
Use Path.GetTempPath() API to find out the temp directory location.

我有几个池,但只有一个池正常工作。这是Classic .NET AppPool。在其他网站上运行网站我得到错误,这是之前提供的。最有趣的是我在 IIS 管理器的应用程序池中找不到池配置之间的任何差异。也许我错过了什么?
我试图更改Windows\TempC:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Fileslocal settings' temporary folder的访问权限,但我的操作没有效果。

所以,希望得到你的帮助和一些建议。

2 回答

  • 2

    您是否调用了Path.GetTempPath()方法(您可以从每个程序调用此方法,而不是从您的网站调用此方法)?

    您必须为帐户设置此路径的完全访问权限。

    我也找到了这个论坛主题

    另一个原因可能是 machine.config 中的 processModel 已设置为 ASP.Net 在 dllhost.exe 内运行而不是 aspnet_wp.exe。如果是这种情况,那么您还需要为 IWAM_machineName 帐户授予权利。

    您可以使用 sysinternals.com 中的 FileMon 实用程序检查进程和帐户的名称,并显示访问被拒绝错误。

  • 0

    创建池并首次运行时,consider...the DefaultAppPool 的另一个选项会在“c:\ Users”目录下创建自己的用户帐户和文件夹。它实际上是一个虚拟用户帐户,应该以应用程序池或“DefaultAppPool”命名。它使用此临时用户帐户来运行池。在某些设置中,当访问 IIs 网站并使用默认池时,人们看不到此文件夹而是 TEMP 文件夹。池中使用此 User 文件夹,ASP.NET 用于缓存和写入文件资源以及 IIs,ASP.NET 和此虚拟帐户使用的其他内容。

    如果您在“用户”文件夹中看到“TEMP”文件夹,则表明 IIs 和注册表中的应用程序池帐户已损坏。池正在创建 TEMP 文件夹作为此虚拟帐户的备份,该虚拟帐户可能没有正确的安全设置。我有这个确切的场景。

    要解决此问题,请转到以下注册表:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList 查看您是否拥有 DefaultAppPool 用户帐户的“.bak”扩展名的 SID 用户帐户。如果有,请删除它并重新启动电脑。再次测试您的网站,确保其实际设置为使用 DefaultAppPool。它现在应该在 Users 中重新创建“DefaultAppPool”文件夹,重新创建 DefaultAppPool 用户的注册表项,并且您的错误应该消失。即没有 TEMP 文件夹。

    在我这样做之后,我的 Web 应用程序的 Visual Studio 中的所有堆栈溢出错误以及 IIs 中应用程序池的所有重新启动和最终崩溃都消失了。

相关问题