IIS 7:身份“IIS APPPOOL\DefaultAppPool”没有足够的权限来访问临时目录

Posted

技术标签:

【中文标题】IIS 7:身份“IIS APPPOOL\\DefaultAppPool”没有足够的权限来访问临时目录【英文标题】:IIS 7: Identity 'IIS APPPOOL\DefaultAppPool' does not have sufficient permission to access the temp directoryIIS 7:身份“IIS APPPOOL\DefaultAppPool”没有足够的权限来访问临时目录 【发布时间】:2011-11-18 11:35:29 【问题描述】:

我在 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.

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

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

【问题讨论】:

【参考方案1】:

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

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

我也找到了this forum topic:

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

可以在with access下查看进程名和账户名 使用来自 sysinternals.com 的 FileMon 实用程序时发生拒绝错误。

【讨论】:

【参考方案2】:

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

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

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

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

【讨论】:

在C:\Users下也可以看到一个名为“TEMP.IIS APPPOOL”的文件夹。删除 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList 下属于 IIS 用户帐户的密钥并重新启动修复它!

以上是关于IIS 7:身份“IIS APPPOOL\DefaultAppPool”没有足够的权限来访问临时目录的主要内容,如果未能解决你的问题,请参考以下文章

使用 Powershell 3.0 切换 IIS 7.5 身份验证“匿名身份验证”?

IIS 7:身份“IIS APPPOOL\DefaultAppPool”没有足够的权限来访问临时目录

使用 IIS 7.5 进行表单身份验证 - 未授权

iis 7.5 dns windows身份验证页面用户身份不起作用

IIS 7.5 中的 Windows 身份验证失败

IIS 7.5 Windows 身份验证失败,除非代码文件共享给最终用户