问题远程计算机上读取的存储量(Problem reading amount of memory on

2019-09-26 07:11发布

我试图确定在计算机中安装的物理内存量。 为了acomplish这个我使用WMI(通过.NET 4.0)和它的服务。 问题是,不管有,返回值什么内存远程计算机的量为4GB。 这已经过测试有三个远程计算机:

  • 虚拟机,1GB RAM,Windows 2003的
  • 物理机,2GB内存,Windows XP中
  • 物理机,2GB内存,64位Windows 7

我自己也运行物理机,4GB内存,64位Windows 7。

显示的代码:

uint phisicalMemorySize = 0;

ConnectionOptions co = new ConnectionOptions();
co.Username = null;

ManagementScope ms = new ManagementScope("\\\\" + computerName, co);
ObjectQuery q = new ObjectQuery("select TotalPhysicalMemory from Win32_ComputerSystem");
ManagementObjectSearcher os = new ManagementObjectSearcher(ms, q);
ManagementObjectCollection moc = os.Get();

foreach (ManagementObject o in moc)
{
    phisicalMemorySize += Convert.ToUInt64(o["TotalPhysicalMemory"], CultureInfo.InvariantCulture);
}

我一直在使用也试图select Capacity from Win32_PhysicalMemoryselect TotalVisibleMemorySize from Win32_OperatingSystem的查询,但无济于事。 在结束phisicalMemorySize将是百达4GB。

Answer 1:

TotalPhysicalMemory在MSDN库文档响亮的声明:

物理内存的总大小。 要注意的是,在某些情况下,此属性可能不是物理内存返回的准确值。 例如,如果BIOS使用的一些物理存储器的它是不准确的。 对于一个精确的值,使用Win32_PhysicalMemory容量属性。

据我所知,所有的现代机器的BIOS复制到内存。 我认为Capacity属性是多少内存在机器使用 ,不存在多少。 这是任何的32位操作系统上2千兆字节,4千兆字节为64位操作系统上的32位的过程。 比较,比方说,名单<>。容量对Count属性。

我得到TotalPhys,3千兆字节,我知道我有我的笔记本电脑一个体面的价值。 容量为2千兆字节,操作系统相匹配。 WMI确实得到片状有时,它是几乎完美。

使用WMI代码Creator实用程序来获得第二个意见。 我认为这是一个.NET 1.1的程序,如果你运行它针对64位操作系统所以要小心它的结果。 如果您使用Visual Studio 2010,然后注意在项目中的平台目标设置。 它默认为86,所以你即使是在64位操作系统在32位模式下运行。 项目+属性,生成标签,平台目标设定。



Answer 2:

发现这个问题。 它与

ManagementScope ms = new ManagementScope("\\\\" + computerName, co);

线。 正确的是

ManagementScope ms = new ManagementScope("\\\\" + computerName + "\\root\\CIMV2", co);

它看起来像它默认为本地计算机。

感谢汉斯谁向我指出WMI代码造物主。 该工具真的帮助很大。



文章来源: Problem reading amount of memory on remote computer
标签: c# wmi