2013-04-05 81 views
2

我正在查詢WMI以檢查特定的驅動器號,如果它不存在,那麼我想運行一個方法,它將使用特定的設置創建它。現在我面臨的問題是當我發送測試查詢來查看驅動器號是否存在時,它將返回空。沒有錯誤或例外。WMI查詢不會返回任何信息

我該如何處理這種情況?

感謝

ManagementObjectSearcher searcher = 
         new ManagementObjectSearcher("root\\cimv2", 
         @"SELECT * FROM Win32_Volume Where DriveLetter = '" + DriveLetter + "'"); 
       foreach (ManagementObject queryObj in searcher.Get()) 
       { 
        drives.CurrentDriveLetter = queryObj["DriveLetter"] == null ? "null" : queryObj["DriveLetter"].ToString(); 
        drives.CurrentDriveSize = queryObj["Capacity"] == null ? "null" : queryObj["Capacity"].ToString(); 
        drives.CurrentDriveName = queryObj["Label"] == null ? "null" : queryObj["Label"].ToString(); 


       } 
+0

什麼是'UpdateUI(驅動器),你可以張貼方法以及..?還有什麼是驅動器,它在哪裏聲明。? – MethodMan 2013-04-05 21:33:38

+0

驅動器是一個類,只是數字/字母/標籤/大小。 UpdateUI是更新列表視圖的東西。這兩件事情可以忽略,我試圖找出一種方法來區分結果WITH數據和結果WITHOUT數據。這對我來說是個棘手的部分,因爲沒有拋出任何異常 – KPS 2013-04-05 21:44:51

+0

我測試了代碼,並且我得到了所有東西,但驅動器Letter也是''.ToString()''應該以這種方式進行鑄造'(string)queryObj [「DriveLetter」];'' – MethodMan 2013-04-05 21:48:49

回答

1

按照你的意見,你只需要確定由ManagementObjectSearcher.Get方法返回的集合有元素。爲此,您可以使用Count屬性。

試試這個示例代碼

using System; 
using System.Collections.Generic; 
using System.Management; 
using System.Text; 

namespace GetWMI_Info 
{ 
    class Program 
    { 


     static void Main(string[] args) 
     { 
      try 
      { 
       ManagementScope Scope;     
       Scope = new ManagementScope(String.Format("\\\\{0}\\root\\CIMV2", "."), null); 
       Scope.Connect(); 
       ObjectQuery Query = new ObjectQuery("SELECT * FROM Win32_Volume Where DriveLetter='X:' "); 
       ManagementObjectSearcher Searcher = new ManagementObjectSearcher(Scope, Query); 
       if (Searcher.Get().Count==0)     
       { 
        Console.WriteLine("Do something, when the collection is empty.");     
       } 
       else 
       foreach (ManagementObject WmiObject in Searcher.Get()) 
       { 
        Console.WriteLine("{0} {1}","Name",WmiObject["Name"]);// String 

       } 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(String.Format("Exception {0} Trace {1}",e.Message,e.StackTrace)); 
      } 
      Console.WriteLine("Press Enter to exit"); 
      Console.Read(); 
     } 
    } 
}