WMI硬件,获取RAM信息

时间:2011-04-15 02:20:49

标签: c# vbscript wmi

我需要从本地和远程计算机检索RAM信息,我知道System.Management中的WMI并且我正在使用它,但我的WMI问题是Win32_PhysicalMemory类有一个我需要的值叫做“< strong> MemoryType “,但它总是返回0或”未知“ Win32_PhysicalMemory class (http://msdn.microsoft.com/en-us/library/aa394347%28v=vs.85%29.aspx)

我尝试在3个不同的XP Professional计算机上使用管理员帐户的C#和VBScript中的Win32_PhysicalMemory,并返回相同的0或“Unknown”MemoryType值。我使用的代码简单而简短,从网络上的许多来源复制和粘贴,所以我确信它没有重大问题。

我是否错误地使用WMI或是否有可以使用的Windows API替代方案?
远程报告不是必需的。

具体来说,我需要计算它拥有或可以拥有的RAM的数量,速度,它使用的RAM类型,DDR2,DDR3等,Win32_PhysicalMemory类给了我所有这些除了类型RAM。

ConnectionOptions connection = new ConnectionOptions();
connection.Impersonation = ImpersonationLevel.Impersonate;

ManagementScope scope = new ManagementScope("\\\\.\\root\\CIMV2", connection);                
scope.Connect();

ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_PhysicalMemory");

ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);

foreach (ManagementObject queryObj in searcher.Get())
{
    System.Diagnostics.Debug.WriteLine("-----------------------------------");
    System.Diagnostics.Debug.WriteLine("Capacity: {0}", queryObj["Capacity"]);
    System.Diagnostics.Debug.WriteLine("MemoryType: {0}", queryObj["MemoryType"]);
}

1 个答案:

答案 0 :(得分:3)

根据this kb article,某些类型的内存将被列为未知,因为它当时不在SMBIOS(WMI使用)中。显然它从那时起就没有更新过。它说它适用于Windows Server 2003,但我在Windows 7 x64上看到了相同的结果。

我想要解决这个问题,你可以削减中间人,而不是使用WMI,而是直接使用SMBIOS。我不会在那里提供太多帮助,但至少它会给你一个方向继续。