#c# #vbscript #wmi
#c# #vbscript #wmi
Вопрос:
Мне нужно получить информацию об оперативной памяти как с локального, так и с удаленного компьютеров, я знаю о WMI в System.Management, и я использую его, но моя проблема с WMI заключается в том, что класс Win32_PhysicalMemory имеет нужное мне значение «MemoryType«, но он всегда возвращает 0 или «Неизвестно».
Класс Win32_PhysicalMemory (http://msdn.microsoft.com/en-us/library/aa394347(v=vs.85).aspx)
Я попытался использовать Win32_PhysicalMemory как с C #, так и с VBScript на 3 разных компьютерах XP Professional с учетной записью администратора и получил одинаковое значение 0 или «Неизвестный» MemoryType, возвращаемое. Код, который я использовал, прост и короток, скопирован и вставлен из нескольких источников по сети, поэтому я уверен, что с ним нет серьезных проблем.
Я неправильно использую 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:
Согласно этой статье, некоторые типы памяти будут указаны как неизвестные, поскольку в то время их не было в SMBIOS (которые использует WMI). По-видимому, с тех пор оно не обновлялось. В нем говорится, что это применимо к Windows Server 2003, но я вижу те же результаты в Windows 7 x64.
Я полагаю, чтобы обойти это, вы можете отключить посредника и не использовать WMI, а использовать SMBIOS напрямую. Здесь я не окажу особой помощи, но, по крайней мере, это даст вам направление для дальнейших действий.
Комментарии:
1. Нет, это все еще точно. Не вся производимая память содержит необходимую информацию, закодированную в ее EEPROM. Если ее там нет, она не может быть прочитана. Вот так просто.
2. но когда я использую программное обеспечение под названием CPU-Z, оно выдает мне всю информацию, поэтому я знаю, что оно хранится в каком-то программном обеспечении.
3. @неоднозначный: Да, это то, о чем я тоже думал. Хотя Коди прав, возможно, CPU-Z хранит информацию, которую они находят, на основе серийных номеров.