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"]
을 호출하면 올바르게 드라이브 문자가 반환됩니다.
DriveType 5는 CD 용입니다. "선택 * from Win32_LogicalDisk WHERE DriveType! = 5"> – sgmoore
Blimey, 너희들은 빠르다! 그리고 둘 다! 죄송합니다. Google을 잘못 사용하여 비난했습니다. 고맙습니다. – David