[EntLib]为什么拒绝ASPNET对性能数据进行访问
编写者 |
日期 |
关键词 |
郑昀@ultrapower |
2005-6-27 |
”Enterprise Library” ASP.NET PerfLib WMI |
现象
浏览我们的ASP.NET站点,得到了这样的页面错误提示:
拒绝对注册表项的访问。
背景:
在一台很干净的Windows 2000服务器上,我们顺次安装了
dotnetfx.exe和NDP1.1sp1-KB867460-X86.exe,
之后运行EnterpriseLibraryJan2005.exe安装Microsoft Enterprise Library。
之后部署我们的ASP.NET站点在这台机器上,它的特殊之处是加载页面时需要实例化Microsoft Enterprise Library的Caching Application Block。
在事件察看器中找到相应的错误警告:
错误: |
事件类型: 错误 事件来源: Perflib 事件种类: 无 事件 ID: 1000 日期: 2005-6-27 描述: 拒绝 ASPNET 从 C:\WINNT\Microsoft.NET\Framework\v1.1.4322\aspnet_wp.exe 对性能数据进行访问 |
。
临时的解决办法
由于在现场环境急于演示ASP.NET站点,所以临时把ASPNET账号加入Administrators组中。这样页面就可以正常加载了。
然后再从Administrators组去掉ASPNET账号,页面也继续可以正常加载。
原理
Windows 2000限制了只有Administrators组才可以访问WMI数据。而Microsoft Enterprise Library需要访问WMI记录的性能数据,这个可以通过我的另一篇文章《[C#]服务为何会依赖于WMI Performance Adapter.doc》http://www.cnblogs.com/zhengyun_ustc/archive/2005/06/13/173586.html中的一段话了解一二:
Microsoft.Practices.EnterpriseLibrary.Caching工程中,有对“System.Management.Instrumentation”的引用。
而这个“System.Management.Instrumentation”命名空间提供一些类,提供在规范应用程序管理并通过 WMI 向潜在使用者公开管理信息和事件时必需的类。这样,Microsoft Application Center 或 Microsoft Operations Manager 等使用者就可以轻松地管理您的应用程序,而管理员脚本或其他应用程序(托管应用程序和非托管应用程序)也可以监视和配置您的应用程序。
也就是说,正是因为Microsoft.Practices.EnterpriseLibrary.Caching,所以为服务引入了“WMI Performance Adapter”服务的依赖性。
如果是一个未授权的账号,比如ASPNET要访问WMI数据,就会得到这样的错误:“拒绝 ASPNET从 C:\WINNT\Microsoft.NET\Framework\v1.1.4322\aspnet_wp.exe 对性能数据进行访问”。
解决方法
我们可以授权ASPNET账号以访问WMI API的权限,通过如下步骤:
1. 打开计算机管理;
2. 展开“服务和应用程序”;
3. 选中“WMI 控件”节点;
4. 右键菜单中,选择“属性”,则看到“连接到Windows管理”对话框,如下所示
然后出现“WMI 控件 属性”对话框;
5. 在“WMI 控件 属性”对话框中,查看“安全”属性页,如下所示:
6. 展开“Root”根节点,选中“WMI”节点;
7. 点击“安全设置”,添加ASPNET的访问权限,如下所示:
8. 点击“应用”和“确定”以保存设置。
编写者 |
日期 |
关键词 |
郑昀@ultrapower |
2005-6-27 |
”Enterprise Library” ASP.NET PerfLib WMI |