IIS ApplicationPoolIdentity没有"临时ASP.NET文件"的写权限

kar*_*nge 36 asp.net iis windows-8

我试图从名为'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'创建的每个用户设置权限.对?

我看到的当前解决方案只是建议将用户设置为"网络服务",但这似乎打破了引入"ApplicationPoolIdentity"的网站的隔离.

Ed *_*bbs 82

这个ASP.NET论坛的答案,在其主题中未得到承认,是我的解决方案.它的影响也很小:它不会尝试重新注册IIS或为用户提供危险的权限.总结答案:

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

    C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Aspnet_regiis.exe -ga domain\user
    
    Run Code Online (Sandbox Code Playgroud)

domain\user在上面的示例中替换您的域和用户.这就是全部.

Aspnet_regiis.exe的Microsoft文档在这里.请注意,-ga交换机的文档是指版本3.5及更早版本中的错误,它不适用于本地帐户.如果我正确读取它,所有版本都支持域帐户,并且从Framework 4.0开始支持本地帐户.


2017年6月6日更新:对于Windows 8及更高版本,请考虑使用该dism命令.这个SO答案涵盖了它.感谢@codebrain建议这个.


2015年7月7日更新:@Vertigo很赞赏这个答案也适用NETWORK SERVICE于2008 R2/2012下的.NET 2.0帐户,所以我上面关于4.0之前的本地帐户的免责声明可能是错误的.

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

  • 如果它包含一个空格,请确保用引号括起`domain\user`部分,例如`... -ga"IIS AppPool\DefaultAppPool"` (4认同)

小智 7

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

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


Beh*_*nam 6

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

因此,请确保提到的路径存在.

  • 如果问题仍然存在,右键单击文件夹=>属性=>安全=>编辑=>添加=> IIS_USERS (4认同)
  • 这对我有用。一旦我创建了文件夹,问题就解决了。 (2认同)

Alo*_*yte 5

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


Raj*_*dar 1

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

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

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