2015-06-30 98 views
1

我有以下代碼,它可以很好地通過Win32_DiskDrive中的模型字符串值獲取硬盤驅動器序列號。但我需要通過分配的驅動器號來獲取序列號。這可能嗎?如果是這樣如何?使用C#中的WMI查詢通過驅動器盤符獲取硬盤驅動器序列號

public string GetDriveSerial(string model) 
{ 
    string serial = string.Empty; 
    string query = "SELECT * FROM Win32_DiskDrive WHERE Model = '" + model + "'"; 
    try 
    { 
     using (var results = new ManagementObjectSearcher("root\\CIMV2", query)) 
     { 
      foreach (ManagementObject result in results.Get()) 
      { 
       serial = result["SerialNumber"].ToString(); 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
    return serial; 
} 

回答

4

你可以試試這個:

public static string GetSerialFromDrive(string driveLetter) 
{ 
    try 
    { 
     using (var partitions = new ManagementObjectSearcher("ASSOCIATORS OF {Win32_LogicalDisk.DeviceID='" + driveLetter + 
              "'} WHERE ResultClass=Win32_DiskPartition")) 
     { 
      foreach (var partition in partitions.Get()) 
      { 
       using (var drives = new ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" + 
                 partition["DeviceID"] + 
                 "'} WHERE ResultClass=Win32_DiskDrive")) 
       { 
        foreach (var drive in drives.Get()) 
        { 
         return (string)drive["SerialNumber"]; 
        } 
       } 
      } 
     } 
    } 
    catch 
    { 
     return "<unknown>"; 
    } 

    // Not Found 
    return "<unknown>"; 
} 

這預計這樣的驅動器盤符: 「C:」, 「d:」 ...... 原代碼可以發現here

+0

這很好,但我可能有兩個USB硬盤連接,是相同的型號。這將使得很難獲得正確的序列號。通過'Win32_DiskDrive'中的模型查詢。我需要通過盤符來查詢串行。 –

+0

@MickIlovski我更新了我的答案。忘記了,驅動器已經保存了關於序列號的信息。所以你只需要一種方法。 –

+0

不錯,謝謝! –