2014-01-12 124 views
0
var ram = new ManagementObjectSearcher("select MaxCapacity from Win32_PhysicalMemoryArray").Get().Cast<ManagementObject>().First();; 
RamAmount = (uint)ram["MaxCapacity"]/4096; 

我得到了這段代碼得到安裝RAM的總數。但查詢返回空,我得到錯誤「序列不包含任何元素」基本上意味着查詢是空的。 有人知道爲什麼,因爲這個程序運行在2000年其他電腦的工作正常。wmi查詢返回空

+0

的確代碼運行正常我的機器上(Windows 8.1中64位) – Jim

+0

這聽起來像是特定於該計算機的問題。我假設'新的ManagementObjectSearcher(「從Win32_PhysicalMemoryArray選擇MaxCapacity」)。Get()。Count''返回'0'?你想獲得總安裝的物理內存嗎?我相信['Win32_PhysicalMemory'類](http://msdn.microsoft.com/library/aa394347.aspx)的'Capacity'屬性更適合於此。 – BACON

回答

0

我不知道你是如何得到這個錯誤,因爲ManagementObjectSearcher class沒有提供索引器,所以你的代碼甚至不會編譯。你需要調用Get method檢索結果:

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("select MaxCapacity from Win32_PhysicalMemoryArray")) 
using (ManagementObjectCollection results = searcher.Get()) 
{ 
    uint ramKilobytes = results 
     .Cast<ManagementBaseObject>() 
     .Sum(memoryArray => (uint) memoryArray["MaxCapacity"]); 

    RamAmount = ramKilobytes/4096; 
} 
+0

對不起,我忘了添加一些東西。這就是我所說的。 –