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

时间:2011-09-16 07:35:03

标签: .net asp.net iis windows-7 iis-7

我的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 个答案:

答案 0 :(得分:2)

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

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

我还找到了this forum topic

  

另一个原因可能是设置了machine.config中的processModel   所以ASP.Net在dllhost.exe中运行而不是   ASPNET_WP.EXE。如果是这种情况,那么你需要给予权利   也是IWAM_machineName帐户。

     

您可以检查具有访问权限的流程和帐户的名称   使用sysinternals.com中的FileMon实用程序发生拒绝错误。

答案 1 :(得分:0)

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

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

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

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