2011-04-15 6 views
2

로컬 및 원격 컴퓨터에서 RAM 정보를 검색해야하는데 System.Management의 WMI에 대해 알고 있고이를 사용하고 있지만 WMI에서의 문제점은 Win32_PhysicalMemory 클래스에 값이 있다는 것입니다 내가 "MemoryType"이라고 불러야하지만 항상 0 또는 "알 수 없음"을 반환합니다. 내가 관리자 계정으로 3 개의 다른 XP 프로페셔널 컴퓨터에 모두 C# 및 VBScript를에서 Win32_PhysicalMemory를 사용하려고하고 동일한 0 또는 "알 수 없음"MemoryType 값을 가지고있다
Win32_PhysicalMemory class (http://msdn.microsoft.com/en-us/library/aa394347%28v=vs.85%29.aspx)WMI 하드웨어, RAM 정보 얻기

이 돌아왔다. 내가 사용한 코드는 간단하고 짧으며, 인터넷을 통해 여러 소스에서 복사하여 붙여 넣을 수 있으므로 중요한 문제는 없습니다.

WMI를 잘못 사용하고 있습니까? 아니면 사용할 수있는 Windows API 대안이 있습니까?
원격 보고서가 반드시 필요한 것은 아닙니다.

특히 RAM의 스틱 수, 또는 속도, DDR2, DDR3 등의 RAM 유형을 계산해야하는데 Win32_PhysicalMemory 클래스는이 유형을 제외하고이 모든 것을 제공합니다 RAM의. 이 시점 (WMI 사용)을 SMBIOS 않고 이후

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

this kb article에 따르면, 메모리의 특정 타입은 알려지지으로 나열한다. 분명히 그 이후로 업데이트되지 않았습니다. Windows Server 2003에도 적용되지만 Windows 7 x64에서도 동일한 결과가 나타납니다.

이 문제를 해결하려면 중간 사람을 잘라내고 WMI를 사용하지 말고 직접 SMBIOS를 사용하십시오. 나는 거기에서 많은 도움이되지는 않을 것이지만 적어도 그것은 계속할 방향을 줄 것이다.

+0

아니요, 여전히 정확합니다. 생성 된 모든 메모리가 EEPROM에 인코딩 된 필요한 정보를 가지고있는 것은 아닙니다. 그것이 없으면 읽을 수 없습니다. 그처럼 간단합니다. –

+0

하지만 CPU-Z라는 소프트웨어를 사용하면 모든 정보를 제공하므로 아무 것도 저장되지 않습니다. – ambiguousPanda

+0

@ambiguous : 네, 그렇게 생각하고 있습니다. Cody는 요점이 있지만 CPU-Z는 일련 번호를 기반으로 찾은 정보를 저장합니다. –