2011-04-15 69 views
2

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

我试图在3级不同的XP专业版的电脑使用Win32_PhysicalMemory来自C#和VBScript与管理员帐户,并得到了相同的0或“未知” MemoryType返回值。我使用的代码简单而简短,从网络上的多个源复制并粘贴,所以我确信它没有什么大问题。

我是错误地使用WMI还是有我可以使用的Windows API选择?
远程报告不是必需的。

具体而言,我需要计算它具有或可以具有的内存条数量,速度以及它使用的内存类型,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"]); 
} 

回答

3

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

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

+0

不,这仍然是准确的。并非所有生产的存储器都具有在其EEPROM中编码的必要信息。如果不存在,则无法读取。就那么简单。 – 2011-04-15 06:59:47

+0

但是当我使用一个叫做CPU-Z的软件时,它给了我所有的信息,所以我知道它存储了一些东西。 – ambiguousPanda 2011-04-17 14:57:40

+0

@ambiguous:是的,这也是我的想法。虽然科迪有一点,但它可能是CPU-Z存储他们根据序列号找到的信息。 – 2011-04-17 18:12:50