【问题标题】:IIS ApplicationPoolIdentity does not have write permission to 'Temporary ASP.NET Files'IIS ApplicationPoolIdentity 没有对“临时 ASP.NET 文件”的写入权限
【发布时间】:2014-05-10 11:09:57
【问题描述】:

我正在尝试从名为“SomeAppPool”的“AppPool”启动网站,该网站使用“ApplicationPoolIdentity”,当我启动网站时收到以下错误:

当前身份 (IIS_APPPOOL\SomeAppPool) 没有对 'c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files' 的写入权限

我在 Windows 8 下的 Visual Studio 2012(未附加调试器)中使用“使用本地 IIS Web 服务器”启动网站。

我注意到的第一件事是“临时 ASP.NET 文件”文件夹甚至没有 存在,所以没有什么可以设置安全权限。

第二个问题是,即使有文件夹,我要设置什么权限?我假设我不必为通过“ApplicationPoolIdentity”创建的每个用户设置权限。对吧?

我看到的当前解决方案只是建议将用户设置为“网络服务” 但这似乎打破了“ApplicationPoolIdentity”网站的隔离 被介绍了。

【问题讨论】:

  • 我遇到了完全相同的问题。您能找到解决方案吗?
  • 不,很遗憾,我没有找到任何解决此问题的方法。我开始认为实际上没有解决方案。我很难相信微软会在不考虑对 .NET 应用程序的影响的情况下添加“ApplicationPoolIdentity”功能。
  • 我应该添加一个明确的答案,而不是说不要在 .NET 应用程序中使用“ApplicationPoolIndentity”吗?
  • 看来你的直觉是正确的。网络服务不是首选,“因为作为网络服务运行的服务可以篡改以相同身份运行的其他服务”,链接如下:(iis.net/learn/manage/configuring-security/…)。

标签: asp.net iis windows-8


【解决方案1】:

This ASP.NET forum answer,在其线程中未被确认,是我的解决方案。它的影响也很小:它不会尝试重新注册 IIS 或赋予用户危险的特权。总结一下答案:

  1. 以管理员身份打开命令窗口(开始/程序/附件,然后右键单击命令提示符,然后选择“以管理员身份运行”)。
  2. 输入以下命令:

    C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Aspnet_regiis.exe -ga domain\user
    

用您的域和用户替换上面示例中的domain\user。就是这样。

Aspnet_regiis.exe 的 Microsoft 文档是 here。请注意,-ga 开关的文档是指 3.5 及更早版本中的一个错误,该错误不适用于本地帐户。如果我没看错的话,所有版本都支持域帐户,并且从 Framework 4.0 开始支持本地帐户。


2017 年 6 月 6 日更新:对于 Windows 8 及更高版本,请考虑使用 dism 命令。它包含在this SO answer 中。感谢@codebrain 提出这个建议。


2015 年 7 月 7 日更新:@Vertigo 友好地评论说,这个答案也适用于 2008R2/2012 下 .NET 2.0 中的 NETWORK SERVICE 帐户,所以我上面关于 4.0 之前的本地帐户的免责声明可能错了。

如果其他人发现这适用于 .NET 3.5 或更早版本的本地帐户,请随时编辑我的答案或在 cmets 中注明;对于可能遇到同样问题的其他人来说,这将是一个很大的帮助。

【讨论】:

  • 使用该解决方案为 2008R2/2012 下的 2.0 版本创建缺少的临时文件夹。 “网络服务”帐户没有遇到任何问题(尽管它不是真正的本地帐户)。
  • 感谢@Vertigo 的更新!我很难理解文档(这不是我的专业领域),所以你的评论极大地改善了我的回答;我真的很感激。
  • 如果domain\user 部分包含空格,请确保用引号括起来,例如... -ga "IIS AppPool\DefaultAppPool"
  • 如果这不起作用,请尝试C:\Windows\Microsoft.NET\Framework\v4.0.30319\Aspnet_regiis.exe -ga domain\user。 (非 64 位版本)
  • 如果是无法写入临时目录的 IIS 应用程序池,请使用主体名称 IIS_IUSRS
【解决方案2】:

我遇到了同样的问题。我检查了路径c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\ 寻找Temporary ASP.NET Files,但没有任何同名的文件夹。所以我手动创建了一个新文件夹并将其命名为Temporary ASP.NET Files 并修复了问题。

因此,请确保上述路径存在。

【讨论】:

  • 如果问题仍然存在右键单击文件夹 => 属性 => 安全 => 编辑 => 添加 => IIS_USERS
  • 这对我有用。一旦我创建了文件夹,问题就解决了。
【解决方案3】:

除了投票赞成的解决方案外,请检查您的磁盘空间并确保有足够的可用磁盘空间。

我刚刚在我们的一台生产服务器上遇到了这个问题,它与磁盘空间不足有关。

【讨论】:

  • 哇,这与我们的生产服务器发生的情况完全相同。幸运的是,我能够在几分钟内找到您的答案? 日志占用了磁盘空间
  • 这很容易刷掉而不检查,但在确信应用程序池用户和安全性方面没有任何变化之后,果然我的开发机器在驱动器上还剩下 10%。
【解决方案4】:

我通过将应用程序池使用的用户添加到 IIS_IUSRS 组解决了该错误。

【讨论】:

    【解决方案5】:

    我们现在是 2021 年,但在 Windows Server 2019 上也遇到了这个问题。

    在我的情况下,错误 CS0016 具有误导性:在 Temporary ASP.NET Files 上为 ApplicationPool-Identities 或类似用户授予权限不起作用,这不是实际问题。

    安装全新服务器后,Users 无权修改C:\Windows directory 中的临时文件夹。当.NET需要将临时文件写入temp文件夹时,由于没有写入权限而发生异常。

    Usersmodify 权限分配给C:\Windows 目录下的临时文件夹对我有用。

    【讨论】:

    • 谢谢。适用于我的 Windows 10。
    【解决方案6】:

    C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319 中尝试运行aspnet_regiis.exe 命令。

    通常应设置权限。如果发生 Windows 添加/删除程序,或者如果安装了新的 .NET 版本,这些东西会稍微重置。运行 aspnet_regiis.exe 应该会有所帮助。

    另外,请确保您以管理员身份运行 Visual Studio。

    【讨论】:

    • 如果我尝试在 Windows 8 下为 v4.0.30319 框架运行“aspnet_regiis.exe -I”,我会收到一条错误消息,指出它不受支持。见这篇文章:c-sharpcorner.com/UploadFile/7e39ca/…
    • 我已将 Visual Studio 设置为始终以“管理员”身份运行,但在这种情况下,我不明白为什么会有任何不同(因为我在 IIS 下运行)。
    【解决方案7】:

    我刚刚遇到了这个问题,我所做的是创建一个新帐户,比如说它的“Webby”。

    在 ISS 中,进入页面的高级设置并将“物理路径凭据”更改为 Webby 帐户。上面有网页目录的 Path 字段;在资源管理器中打开此文件夹并添加具有修改权限的 Webby。在“失败的请求跟踪”下有一个日志目录;也添加修改并将“启用”设置为 true(您可以稍后将其关闭,但请确保它会工作)。 此时您可以尝试您的网站,您肯定会收到错误消息,因为您使用的是用户。

    当前身份 (YOUR\Webby) 没有对“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files”的写入权限。

    现在,要解决您的问题,您需要转到“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files”目录并将 Webby 添加到该目录,再次修改有效。

    只为网站使用特殊帐户的解决方案是个好主意。它是一个真实帐户(不像 ApplicationPool 那样是虚拟帐户)并且 Windows 不会混淆(...很容易)。

    希望这会有所帮助。

    【讨论】:

      【解决方案8】:

      在 IIS7 中,我右键单击虚拟目录,删除应用程序并再次添加它。这为我解决了问题。

      【讨论】:

        【解决方案9】:

        我解决了 通过释放磁盘空间

        【讨论】:

          【解决方案10】:

          我遇到了这个问题,我可以解决它。您只需为当前用户授予以下文件夹的权限:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files。这很容易。

          祝你好运!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-10-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-11-07
            • 1970-01-01
            • 2014-06-06
            相关资源
            最近更新 更多