【问题标题】:WMI hardware, get RAM infoWMI 硬件,获取 RAM 信息
【发布时间】:2011-08-06 00:25:38
【问题描述】:

我需要从本地和远程计算机检索 RAM 信息,我知道 System.Management 中的 WMI 并且我正在使用它,但我对 WMI 的问题是 Win32_PhysicalMemory 类有一个我需要的值,称为“MemoryType”,但它总是返回 0 或“未知”。
Win32_PhysicalMemory class (http://msdn.microsoft.com/en-us/library/aa394347%28v=vs.85%29.aspx)

我尝试在 3 台具有管理员帐户的不同 XP Professional 计算机上同时使用 C# 和 VBScript 中的 Win32_PhysicalMemory,并返回相同的 0 或“未知”MemoryType 值。我使用的代码简单而简短,是从网络上的许多来源复制和粘贴的,所以我确信它没有什么大问题。

我是否错误地使用了 WMI,或者是否有我可以使用的 Windows API 替代方案?
远程报告不是必需的。

具体来说,我需要计算它拥有或可以拥有的 RAM 条数、速度以及它使用的 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"]);
}

【问题讨论】:

    标签: c# vbscript wmi


    【解决方案1】:

    根据this kb article,某些类型的内存将被列为未知,因为它当时不在 SMBIOS(WMI 使用)中。显然,从那以后它就没有更新过。它说它适用于 Windows Server 2003,但我在 Windows 7 x64 上看到了相同的结果。

    我想解决这个问题,你可以切断中间人,不使用 WMI,而是直接使用 SMBIOS。我不会有太多帮助,但至少它会给你一个前进的方向。

    【讨论】:

    • 不,这仍然是准确的。并非所有生产的存储器都在其 EEPROM 中编码了必要的信息。如果不存在,则无法读取。就这么简单。
    • 但是当我使用一个名为 CPU-Z 的软件时,它会为我提供所有信息,所以我知道它存储在某个软件中。
    • @ambiguous:是的,我也是这么想的。虽然 Cody 有一个观点,但 CPU-Z 可能会存储他们根据序列号找到的信息。
    猜你喜欢
    • 2010-10-28
    • 2013-04-14
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    相关资源
    最近更新 更多