2012-04-17 107 views
1

我試圖構建一個簡單的Windows窗體應用程序,可以使用WMI(從硬盤驅動器開始)查詢用戶計算機的功能。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"]由於權限返回空嗎?或者它可能完全是其他的東西?

哦,撥​​打managementObject["name"]的呼叫順便正確地返回盤符。

+1

DriveType 5適用於CD。如果你確定你不是指「從Win32_LogicalDisk中選擇* DriveType!= 5」> – sgmoore 2012-04-17 22:43:54

+0

Blimey,你們很快!而且都是對的!對不起,這是我濫用谷歌這是應該責備。謝謝。 – David 2012-04-17 22:46:10

回答

0

好的,答案是不好的谷歌搜索。查詢正在過濾DriveType = 5,即CD-ROM驅動器。我以爲我在過濾硬盤。

可用空間部分返回null,因爲驅動器中沒有磁盤。