Оборудование WMI, получить информацию о RAM - PullRequest
2 голосов
/ 15 апреля 2011

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

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

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

В частности, мне нужно сосчитатьколичество палочек ОЗУ, которое он имеет или может иметь, скорость и тип ОЗУ, которое он использует, 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"]);
}

1 Ответ

3 голосов
/ 15 апреля 2011

Согласно этой статье kb , определенные типы памяти будут перечислены как неизвестные, поскольку в то время ее не было в SMBIOS (который использует WMI). Видимо, он не обновлялся с тех пор. В нем говорится, что это относится к Windows Server 2003, но я вижу те же результаты на Windows 7 x64.

Полагаю, чтобы обойти это, вы можете вырезать посредника и не использовать WMI, а напрямую использовать SMBIOS. Я не буду там сильно помогать, но, по крайней мере, это даст вам направление для продолжения.

...