2012-09-28 68 views
-1

我的目標是獲取有關PC的數據。獲取HDD並將其中的所有分區列出並存儲在XML中。這適用於連接到PC的所有HDD。我知道如何創建XML,但無法達到分區和HDD的關聯。我嘗試了幾個教程,但沒有好的。有人可以展示如何從Win32_DiskDriveToDiskPartition類獲取信息嗎?如何獲取有關PC硬件的信息?

+0

不是C#,但[此答案](http://stackoverflow.com/a/12271778/62576)顯示瞭如何使用涉及的WMI接口。也許它會有所幫助。當你顯示你已經嘗試過的不起作用時,它也會有所幫助,所以我們至少可以看到它。 –

回答

4

這裏是one linkanother one到如何在C#中使用WMI。實際上,您可以輕鬆地通過Google找到C#中WMI的「如何...」的不同變體,並將其準確應用於您的需求。

對於您的任務,您需要使用Win32_DiskDrive,Win32_DiskDriveToDiskPartition和​​。

  1. Win32_DiskDrive列出磁盤。
  2. Win32_DiskPartition列出分區。
  3. Win32_DiskDriveToDiskPartition列出磁盤和分區之間的引用。

使用此方法:

static void PrintSystemInfo(XElement doc, 
           string className, 
           string[] properties) 
    { 
     ManagementObjectSearcher MOS = 
      new ManagementObjectSearcher("Select * from " + className); 
     XElement xClass = new XElement(className); 
     int count = 0; 

     foreach (ManagementObject o in MOS.Get()) 
     { 
      XElement child = new XElement(string.Concat(className, count++)); 
      for (int i = 0; i < properties.Length; i++) 
      { 
       try 
       { 
        child.Add(new XElement(properties[i], o[properties[i]])); 
       } 
       catch (Exception ex) 
       { 
        child.Add(new XElement(properties[i], ex.Message)); 
       } 
      } 
      xClass.Add(child); 
     } 

     doc.Add(xClass); 
    } 

這樣

 string[] Win32_DiskDriveToDiskPartition_Properties = { 
              "Antecedent", 
              "Dependent" 
             }; 

     string[] Win32_DiskPartition_Properties = { 
              "Name", 
              "DeviceID", 
              "Size", 
              "SystemName", 
             }; 

     string[] Win32_DiskDrive_Properties = { 
             "Description", 
             "InterfaceType", 
             "Model", 
             "Name" 
            }; 
     XElement doc = new XElement("SystemInfo"); 

     PrintSystemInfo(doc, "Win32_DiskDrive", Win32_DiskDrive_Properties); 
     PrintSystemInfo(doc, "Win32_DiskDriveToDiskPartition", Win32_DiskDriveToDiskPartition_Properties); 
     PrintSystemInfo(doc, "Win32_DiskPartition", Win32_DiskPartition_Properties); 

     doc.Save("SystemInfo.xml"); 

它使用System.Management類訪問WMI tools。請記住將對System.Management的引用添加到項目引用列表中,否則將無法識別using System.Management;聲明。

+0

很好的例子,但如何將它們鏈接到硬盤驅動器?我在試着說謊。 HDD1然後我列出它的所有分區,然後去HDD2和它的分區。這裏只列出邏輯驅動器 – gedO

+0

@gedO你可能看看編輯過的答案 – horgh

+0

我明白了。 Thankiu爲你的時間。 – gedO