c# vbscript wmi

c# - Hardware WMI, obtenga información RAM



vbscript (1)

De acuerdo con este artículo kb , ciertos tipos de memoria se enumerarán como desconocidos ya que no estaban en el SMBIOS (que WMI usa) en ese momento. Aparentemente no ha sido actualizado desde entonces. Dice que se aplica a Windows Server 2003 pero veo los mismos resultados en Windows 7 x64.

Supongo que para evitar esto, puedes cortar al intermediario y no usar WMI pero usar SMBIOS directamente. No seré de gran ayuda allí, pero al menos te dará una dirección para continuar.

Necesito recuperar información RAM de las computadoras locales y remotas, conozco WMI en System.Management y lo estoy usando, pero mi problema con WMI es que la clase Win32_PhysicalMemory tiene un valor que necesito llamado " MemoryType ", pero siempre devuelve 0 o "Desconocido".
Clase Win32_PhysicalMemory (http://msdn.microsoft.com/en-us/library/aa394347%28v=vs.85%29.aspx)

Intenté utilizar Win32_PhysicalMemory desde C # y VBScript en 3 computadoras XP Professional diferentes con una cuenta de administrador y obtuve el mismo valor 0 o MemoryType "Desconocido" devuelto. El código que utilicé es simple y corto, copiado y pegado de varias fuentes alrededor de la red, así que estoy seguro de que no hay problemas importantes con él.

¿Estoy usando WMI incorrectamente o hay una alternativa de Windows API que pueda usar?
Los informes remotos no son esenciales.

Específicamente, necesito contar la cantidad de barras de RAM que tiene, o puede tener, la velocidad y el tipo de RAM que usa, DDR2, DDR3, etc., la clase Win32_PhysicalMemory me da todo esto excepto el tipo de 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"]); }