2015-06-30 100 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

不错,谢谢! –