高手请进:在用C#获取内存信息时出错
//获取总内存
ManagementObjectCollection MOC = MCP.getQueryResult( "select * from Win32_LogicalMemoryConfiguration ");
int TotalPhysicalMemory = 0;
foreach (ManagementObject tmpMO in MOC)
{
string tmpStr = tmpMO.GetPropertyValue( "TotalPhysicalMemory ").ToString();
TotalPhysicalMemory = int.Parse(tmpStr);
}
//获取可用内存
MOC = MCP.getQueryResult( "select * from Win32_PerfRawData_PerfOS_Memory ");
int AvailableKBytes = 0;
foreach (ManagementObject tmpMO1 in MOC)
{
string tmpStr = tmpMO1.GetPropertyValue( "AvailableKBytes ").ToString();
AvailableKBytes = int.Parse(tmpStr);
}
在执行 "获取总内存 "的操作时程序正常运行,但在执行 "获取可用内存 "操作时就出现了“访问遭到拒绝”的错误,页面显示的错误如下:
访问遭到拒绝
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Management.ManagementException: 访问遭到拒绝
源错误:
行 137: MOC = MCP.getQueryResult( "select * from Win32_PerfRawData_PerfOS_Memory ");
行 138: int AvailableKBytes = 0;
行 139: foreach (ManagementObject tmpMO1 in MOC)
行 140: {
行 141: string tmpStr = tmpMO1.GetPropertyValue( "AvailableKBytes ").ToString();
在系统日志里记录的错误为:
事件类型:警告
事件来源:ASP.NET 2.0.50727.0
事件种类:Web 事件
事件 ID:1309
日期:2007-9-8
事件:16:34:16
用户:N/A
计算机:Computer
描述:
事件代码: 3005
事件消息: 发生了未处理的异常。
事件时间: 2007-9-8 16:34:15
事件时间(UTC): 2007-9-8 8:34:15
事件 ID: 6f99ffb00143428d9116fe51f9ad18c0
事件序列: 4
事件匹配项: 1
事件详细信息代码: 0
应用程序信息:
应用程序域: /LM/W3SVC/1027221828/Root-1-128337140500000000
信任级别: Full
应用程序虚拟路径: /
应用程序路径: D:\Work\web\
计算机名: Computer
进程信息:
进程 ID: 3944
进程名: aspnet_wp.exe
帐户名: Computer\ASPNET
异常信息:
异常类型: ManagementException
异常消息: 访问遭到拒绝
请求信息:
请求 URL: http://www.web.com/ManagementConnectPool.aspx?s=192.168.0.2&u=abc&p=abcd
请求路径: /ManagementConnectPool.aspx
用户主机地址: 127.0.0.1
用户:
是否已经过身份验证: False
身份验证类型:
线程帐户名: Computer\ASPNET
线程信息:
线程 ID: 1
线程帐户名: Computer\ASPNET
是否正在模拟: False
堆栈跟踪: 在 System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
在 System.Management.ManagementObjectCollection.ManagementObjectEnumerator.MoveNext()
在 Monitor.getMemoryUsage() 位置 D:\Work\web\ManagementConnectPool.aspx.cs:行号 139
在 ManagementConnectPool.Page_Load(Object sender, EventArgs e) 位置 D:\Work\web\ManagementConnectPool.aspx.cs:行号 64
在 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
在 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
在 System.Web.UI.Control.OnLoad(EventArgs e)
在 System.Web.UI.Control.LoadRecursive()
在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
自定义事件详细信息:
有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
用户abc是属于Administrators组的,总内存是可以正常获取到的,就是在获取可用内存信息时才出错的,单独获取用可内存信息时也出现同样的错误。
那位高手帮忙看一下,先谢了。
[解决办法]
.............执行权限不够,必须通过API获得系统最高管理权限才可以操作
[解决办法]
你看看你的ASPNET用户的权限吧~~~~代码应该没问题