2012-04-17 3 views
1

WMI (하드 드라이브로 시작)를 사용하여 사용자 컴퓨터의 기능을 쿼리 할 수있는 간단한 Windows Forms 응용 프로그램을 작성하려고합니다.wmi : null이 반환됩니다.

지금까지, 나는 (HardDriveCheckResult 내 자신의 클래스)까지이있어 :

ConnectionOptions wmiConnOpts = new ConnectionOptions(); 
wmiConnOpts.Impersonation = ImpersonationLevel.Impersonate; 
wmiConnOpts.Authentication = AuthenticationLevel.Default; 
wmiConnOpts.EnablePrivileges = true; 
ManagementObjectSearcher managementObjectSearcher = new ManagementObjectSearcher(@"select * from Win32_LogicalDisk WHERE DriveType = 5"); 
managementObjectSearcher.Scope.Options = wmiConnOpts; 
List<HardDriveCheckResult> hardDriveCheckResults = new List<HardDriveCheckResult>(); 

foreach (ManagementObject managementObject in managementObjectSearcher.Get()) 
{ 
    string hardDriveName = managementObject["name"].ToString(); 
    object objFreeSpace = managementObject["FreeSpace"]; 
    double freeSpace = objFreeSpace == null ? 0d : (double)objFreeSpace; 
    ... additional code not relevant 
} 

난 데 문제는 managementObject["FreeSpace"]는 항상 null을 반환한다는 것입니다. 나는 이것이 WMI 호출이 이루어진 계정의 허가와 관련이 있을지도 모른다고 생각한다. 따라서 Google에 호의를 보인 ConnectionOptions 코드를 포함시켰다.

작업 관리자는 프로그램이 내 계정 (관리자)으로 실행 중이라는 것을 알려 주므로 WMI 호출이 모든 데이터를 반환하지 않는 이유에 대해 다소 혼란 스럽습니다.

managementObject["FreeSpace"]에 대한 호출이 권한 때문에 null을 반환한다는 것을 수정 했습니까? 아니면 완전히 다른 것일 수 있습니까?

오, managementObject["name"]을 호출하면 올바르게 드라이브 문자가 반환됩니다.

+1

DriveType 5는 CD 용입니다. "선택 * from Win32_LogicalDisk WHERE DriveType! = 5"> – sgmoore

+0

Blimey, 너희들은 빠르다! 그리고 둘 다! 죄송합니다. Google을 잘못 사용하여 비난했습니다. 고맙습니다. – David

답변

0

그래, 대답은 Google 검색 결과가 잘못되었습니다. 쿼리는 CD-ROM 드라이브 인 DriveType = 5에서 필터링됩니다. 나는 하드 드라이브를 필터링하고 있다고 생각했다.

드라이브에 디스크가 없기 때문에 여유 공간 부분이 null을 반환했습니다.

관련 문제