IIS 应用程序池身份没有对“Temporary ASP.NET Files”文件夹的写入权限

51
我正尝试从名为“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服务器”(不附带调试器)启动网站。
我注意到的第一件事是,“Temporary ASP.NET Files”文件夹根本不存在,因此无法设置安全权限。
第二个问题是,即使有文件夹,我应该设置什么权限?我假设不必为每个通过“ApplicationPoolIdentity”创建的用户设置权限,对吗?
目前我看到的解决方案只是建议将用户设置为“Network Service”,但这似乎会破坏引入'ApplicationPoolIdentity' 的网站隔离性。

我遇到了完全相同的问题。你能找到解决方法吗? - Mehdi Maujood
不幸的是,我没有找到任何解决此问题的方法。我开始认为实际上没有解决方案。但我很难相信微软会在考虑.NET应用程序的影响之前添加“ApplicationPoolIdentity”功能。 - karmasponge
我应该添加一个明确的答案,告诉人们不要在.NET应用程序中使用'ApplicationPoolIdentity'吗? - karmasponge
你的直觉是正确的。根据以下链接(http://www.iis.net/learn/manage/configuring-security/application-pool-identities),不推荐使用Network Service,因为以Network Service身份运行的服务可能会干扰其他以相同身份运行的服务。 - Tony L.
11个回答

105

这个ASP.NET论坛的回答对我来说是解决方案,但在该帖子中未得到承认。它也影响较小:不会尝试重新注册IIS或给用户危险权限。总结答案如下:

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

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

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

Aspnet_regiis.exe的Microsoft文档在这里。请注意,-ga开关的文档引用了3.5版本及更早版本的错误,即它不能与本地帐户一起使用。如果我理解正确,所有版本都支持域帐户,并且从Framework 4.0开始支持本地帐户。


更新于2017年6月6日:对于Windows 8及以上版本,请考虑使用dism命令。在此SO答案中有介绍。感谢@codebrain提供建议。


更新于2015年7月7日:@Vertigo友善地评论说,这个答案在2008R2 / 2012下.NET 2.0中也适用于NETWORK SERVICE帐户,因此我关于本地帐户需要4.0以上版本的免责声明可能是错误的。

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


1
使用该解决方案在2008R2/2012下创建版本2.0所需的临时文件夹。使用"NETWORK SERVICE"账户没有遇到任何问题(尽管它不是真正的本地账户)。 - Vertigo
谢谢你的更新,@Vertigo!文档对我来说很难理解(这不是我的专业领域),所以你的评论极大地改善了我的答案;我非常感激。 - Ed Gibbs
6
如果 domain\user 部分包含空格,请确保用引号将其括起来,例如 ... -ga "IIS AppPool\DefaultAppPool" - Rudey
1
如果这个方法不起作用,请尝试使用非 64 位版本的 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Aspnet_regiis.exe -ga domain\user - Rudey
1
如果是无法写入临时目录的IIS应用程序池,请使用主体名称IIS_IUSRS - O. Jones
显示剩余2条评论

12

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

所以请确保提到的路径存在。


3
如果问题仍然存在,请右键单击文件夹 => 属性 => 安全 => 编辑 => 添加 => IIS_USERS。 - dont_trust_me
2
这对我很有帮助。一旦我创建了文件夹,问题就解决了。 - Giorgos Betsos
1
在我的情况下,文件夹是存在的,只是需要使用服务器给用户授予权限。 - Hashaam Ahmed
我刚刚不得不给予IIS_USERS写入权限。 - Pellet

9

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

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


1
哇,这正是我们生产服务器发生的情况。幸运的是,我能在几分钟内找到你的答案。 日志正在占用磁盘空间。 - Louie Almeda
很容易就可以将这个问题搁置不管,但在确认应用程序池用户和安全性方面没有任何变化后,我的开发机器上确实只剩下了10%的磁盘空间。 - Phil Cooper

9

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


2
我们已经进入了2021年,但我在Windows Server 2019上也遇到了这个问题。
在我的情况下,错误CS0016是误导性的:在“Temporary ASP.NET Files”上授予ApplicationPool-Identities或类似用户的权限没有起作用,也不是实际问题所在。
在安装新服务器后,“Users”没有权限修改位于“C:\Windows目录”中的临时文件夹。当.NET需要将临时文件写入临时文件夹时,由于没有写入权限而出现异常。
为“Users”分配对“C:\Windows”目录下的临时文件夹进行修改的权限对我很有帮助。

谢谢。在我的Windows 10上工作。 - Leszek P

1

处于 C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319 目录下,尝试运行 aspnet_regiis.exe 命令。

通常情况下权限应该已经设置好了。如果发生了 Windows 添加/删除程序或者安装了新的 .NET 版本,则这些设置会被重置一些。运行 aspnet_regiis.exe 命令应该有所帮助。

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


1
如果我尝试在Windows 8下运行'aspnet_regiis.exe -I'来安装v4.0.30319框架,我会收到一个错误消息,说它不受支持。请参阅此文章:http://www.c-sharpcorner.com/UploadFile/7e39ca/how-to-install-Asp-Net-4-5-in-windows-8/. - karmasponge
我已经设置了Visual Studio始终以“管理员”身份运行,尽管在这种情况下我不知道为什么会有任何区别(因为我是在IIS下运行)。 - karmasponge

0

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


0
在IIS7中,我右键单击了虚拟目录,删除了应用程序并再次添加。这对我有用。

0

我刚遇到这个问题,我的解决方法是创建一个新账户,比如叫做“Webby”。

在ISS中,进入你的页面的高级设置,将“物理路径凭据”更改为Webby账户。上面的路径字段是网页目录;在资源管理器中打开此文件夹并添加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不会那么容易混淆。

希望这可以帮助到您。


0
我曾经遇到过这个问题,但我已经解决了。你只需要为当前用户授予文件夹C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files的权限即可。这很容易。
祝你好运!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接