2011-04-15 2 views
2

Мне нужно получить информацию о RAM с локальных и удаленных компьютеров, мне известно о WMI в System.Management, и я использую его, но моя проблема с WMI заключается в том, что класс Win32_PhysicalMemory имеет значение что мне нужно вызвать «MemoryType», но он всегда возвращает 0 или «Неизвестно».
Win32_PhysicalMemory class (http://msdn.microsoft.com/en-us/library/aa394347%28v=vs.85%29.aspx)WMI hardware, получить информацию о RAM

Я пытался использовать Win32_PhysicalMemory как из C# и VBScript на 3 разных компьютерах XP Professional с учетной записью администратора и получил тот же 0 или «Unknown» значение MemoryType возвращается. Код, который я использовал, прост и короток, скопирован и вставлен из нескольких источников по сети, поэтому я уверен, что с ним нет серьезных проблем.

Я использую WMI неправильно или есть альтернатива Windows API, которую я могу использовать?
Удаленные отчеты не являются существенными.

В частности, мне нужно подсчитать количество палок ОЗУ, которые оно имеет или может иметь, скорость и тип используемой RAM, DDR2, DDR3 и т. Д., Класс Win32_PhysicalMemory дает мне все это, кроме типа ОЗУ.

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. Если его там нет, его нельзя прочитать. Просто как тот. –

+0

, но когда я использую программное обеспечение, называемое CPU-Z, оно дает мне всю информацию, поэтому я знаю, что он хранится. – ambiguousPanda

+0

@Bbigig: Да, это то, о чем я тоже думал. Хотя у Коди есть точка, возможно, CPU-Z сохраняет информацию, которую они находят, на основе серийных номеров. –

Смежные вопросы