ฮาร์ดแวร์ WMI รับข้อมูล RAM

ฉันต้องการดึงข้อมูล RAM จากคอมพิวเตอร์ทั้งในระบบและระยะไกล ฉันทราบถึง WMI ใน System.Management และฉันกำลังใช้งานอยู่ แต่ปัญหาของฉันกับ WMI คือคลาส Win32_PhysicalMemory มีค่าที่ฉันต้องการเรียกว่า "MemoryType " แต่จะคืนค่า 0 หรือ "ไม่ทราบ" เสมอ
คลาส Win32_PhysicalMemory (http://msdn.microsoft.com/en-us/library/aa394347%28v=vs.85%29. aspx)

ฉันได้ลองใช้ Win32_PhysicalMemory จากทั้ง C# และ VBScript บนคอมพิวเตอร์ XP Professional 3 เครื่องที่มีบัญชีผู้ดูแลระบบ และได้รับค่า MemoryType 0 หรือ "Unknown" เหมือนกัน โค้ดที่ฉันใช้นั้นเรียบง่ายและสั้น คัดลอกและวางจากแหล่งต่างๆ ในอินเทอร์เน็ต ดังนั้นฉันมั่นใจว่าจะไม่มีปัญหาใหญ่ๆ เกิดขึ้น

ฉันใช้ WMI ผิดหรือมี Windows API ทางเลือกอื่นที่ฉันสามารถใช้ได้หรือไม่
การรายงานระยะไกลไม่จำเป็น

โดยเฉพาะอย่างยิ่งฉันต้องนับจำนวน RAM ที่มีอยู่หรือสามารถมีได้ ความเร็ว และประเภทของ RAM ที่ใช้ DDR2, DDR3 ฯลฯ คลาส Win32_PhysicalMemory ให้ทั้งหมดนี้กับฉัน ยกเว้นประเภทของ 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"]);
}

person ambiguousPanda    schedule 15.04.2011    source แหล่งที่มา


คำตอบ (1)


ตามบทความ kb นี้ หน่วยความจำบางประเภทจะถูกระบุว่าไม่รู้จักเนื่องจากไม่ได้อยู่ใน SMBIOS (ซึ่ง WMI ใช้) ในขณะนั้น เห็นได้ชัดว่ามันไม่ได้รับการอัพเดตตั้งแต่นั้นมา มันบอกว่าใช้ได้กับ Windows Server 2003 แต่ฉันเห็นผลลัพธ์เดียวกันบน Windows 7 x64

ฉันคิดว่าเพื่อหลีกเลี่ยงปัญหานี้ คุณสามารถตัดคนกลางและไม่ใช้ WMI แต่ใช้ SMBIOS โดยตรง ฉันคงช่วยอะไรได้ไม่มากนัก แต่อย่างน้อยก็จะทำให้คุณมีแนวทางในการเดินต่อไป

person Jeff Mercado    schedule 15.04.2011
comment
ไม่ นั่นยังแม่นยำอยู่ หน่วยความจำบางส่วนที่ผลิตขึ้นไม่ได้มีการเข้ารหัสข้อมูลที่จำเป็นใน EEPROM หากไม่มีก็ไม่สามารถอ่านได้ ง่ายๆแบบนั้น - person Cody Gray; 15.04.2011
comment
แต่เมื่อฉันใช้ซอฟต์แวร์ชื่อ CPU-Z มันจะให้ข้อมูลทั้งหมดแก่ฉัน ดังนั้นฉันจึงรู้ว่ามันถูกเก็บไว้บางส่วน - person ambiguousPanda; 17.04.2011
comment
@คลุมเครือ: ใช่นั่นคือสิ่งที่ฉันก็คิดเช่นกัน แม้ว่า Cody จะมีประเด็น แต่ CPU-Z อาจจัดเก็บข้อมูลที่พบตามหมายเลขซีเรียล - person Jeff Mercado; 17.04.2011