2011-04-15 8 views
2

ローカルコンピュータとリモートコンピュータの両方からRAM情報を取得する必要がありますが、System.ManagementのWMIを認識していますが、WMIの問題はWin32_PhysicalMemoryクラスに値があります「メモリタイプ」と呼ばれる必要がありますが、常に0または「不明」が返されます。
Win32_PhysicalMemory class (http://msdn.microsoft.com/en-us/library/aa394347%28v=vs.85%29.aspx)WMIハードウェア、RAM情報を取得

私は、管理者アカウントで3台の異なるXP Professionalコンピュータ上でC#とVBScriptの両方からWin32_PhysicalMemoryを使用しようとしましたし、同じ0または「不明」MemoryTypeの値が返されてしまいました。私が使ったコードはシンプルで短く、ネットの周りのいくつかのソースからコピーして貼り付けたので、大きな問題はないと確信しています。

私は間違って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"]); 
} 

答えて

3

それは一度に(WMIが使用)SMBIOSにしたのでthis kb articleによれば、メモリの特定のタイプが不明と表示されます。どうやらそれはそれ以来更新されていません。 Windows Server 2003にも当てはまると言われていますが、Windows 7 x64でも同じ結果になります。

この問題を回避するには、中間者を削減してWMIを使用せず、SMBIOSを直接使用することができます。私はそこで多くの助けになることはありませんが、少なくともそれはあなたに行く方向を与えるでしょう。

+0

いいえ、まだ正確です。生成されるすべてのメモリがEEPROMにエンコードされた必要な情報を持っているわけではありません。それがなければ読むことはできません。そのような単純な。 –

+0

しかし、私はCPU-Zと呼ばれるソフトウェアを使用すると、それは私にすべての情報を与えるので、それはどこかに格納されていることを知っています。 – ambiguousPanda

+0

@曖昧さ:それは私があまりにも考えていたものです。 Codyにはポイントがありますが、CPU-Zはシリアル番号に基づいて見つけた情報を格納することができます。 –

関連する問題