前几天
,为公司部署一个ASP.NET网站
,该网站经过本机测试通过,并且在本机发布浏览通过
。但部署到
服务器上后,就一直出现由于无法创建应用程序域,因此未能执行请求的错误信息,之后通过事件查看器,发现具体错误信息:
1:由于无法创建应用程序域,因此未能执行请求
。错误: 0x80070005 拒绝访问。
2:未能初始化 AppDomain:/LM/W3SVC/1635210705/Root
Exception: System.IO.FileLoadException
Message: 未能加载文件或程序集“System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。拒绝访问。
StackTrace:
dotnet错误: 0x80070005 拒绝访问解决方案:
1. 重新注册IIS, NET\Framework\v2.0.50727里的
aspnet_regiis.exe 运行它,重新注册一下
先卸载:.net
aspnet_regiis.exe -u
重新安装:aspnet_regiis.exe -i
2. 安装2.0之后,查看IIS的虚拟目录的属性设置中的ASP.NET标签是否为2.0。
3. 权限问题:
(1). 检查应用程序池的属性,查看它是以什么用户身份运行的,一般是NETWORK SERVICE
(2). 确保这个用户对.NET Framework 2.0的目录有访问权限:systemroot:\Windows\Microsoft.NET\Frameworks\2.0.xxxx
(3). 确保该用户对虚拟目录具有访问权限。
如果已经安上面的说明做过,但问题依旧,那可能是dotnet运行环境需要的系统部分目录的权限出错,请按下面的操作恢复一下dotnet对各目录的权限需求重新设置一遍。
1)
增加iis工作进程组IIS_WPG对c:\windows\assembly的读取和运行权限(由 于assembly是特殊目录,不能直接使用右键然后属性来添加,需要使用cacls命令来添加),要不访问asp.net程序会出现“
服务器应用程序不 可用”的错误。运行命令“cacls c:\windows\assembly /T /G IIS_WPG:R administrators:F SYSTEM:F”【命令就是给iis_wpg组的读权限,administrators和system的完全控制权限并且更改当前目录及其所有子目录中 指定文件的ACL。】,加上权限后需要重新启动对应的应用程序池或者从任务管理器中结束对应的w3wp.exe进程使用权限生效,要不刷新网页还是出现如 上错误。
2)
C:\WINDOWS\Microsoft.NET\Framework目录,加上IIS_WPG的读取和运行权限。此 时只剩下了IIS_WPG,administrators和system。C:\WINDOWS\Microsoft.NET\Framework目录下 的你对应的framework版本文件夹加上user的读取和运行权限,其他的文件夹如URTInstallPath_GAC可以不加。又到重点 了,asp.net编译生成的文件在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files下,所以需要给user组对Temporary ASP.NET Files的写权限。如果你用到了其他版本的framework(如1.1的),注意对应的Temporary ASP.NET Files也要有user组的写权限。
3)
IIS_WPG需要有对C:\WINDOWS\WinSxS目录的读取和运行权限。要不访问时应用池程序会自动停止。事件查看器中出现“启动应用池失败"的错误。
附:如果Temporary ASP.NET Files下出现编译文件有多个文件的提示错误,可以先停止iisadmin,删除Temporary ASP.NET Files 文件夹下的asp.net编译生成的所有文件和文件夹,然后启动iis让asp.net重新编译即可。【要注意停止iis,要不删除了Temporary ASP.NET Files下的文件和文件夹,提示文件被占用】。
如果大家也碰到相似的问题,应该仔细检查下。说不定问题就出在你的疏忽。