Как использовать C# для получения серийного номера жесткого диска?

Как получить серийный номер жесткого диска без использования dll и поддерживается VISTA

4 ответа

using System.Management;

public string GetHDDSerial()
{
    ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");

    foreach (ManagementObject wmi_HD in searcher.Get())
    {
        // get the hardware serial no.
        if (wmi_HD["SerialNumber"] != null)
            return wmi_HD["SerialNumber"].ToString();
    }

    return string.Empty;
}

Вот код, который работает для меня:

ManagementObjectSearcher searcher = null;
 searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");

 foreach (ManagementObject wmi_HD in searcher.Get())
 {
     HardDrive hd = new HardDrive();

     try
     {  
         txtmdl.Text = hd.Caption = wmi_HD["Caption"].ToString();
         txtsn.Text=(hd.SerialNo = wmi_HD.GetPropertyValue("SerialNumber").ToString());

я просто добавил 2 текстовых поля, чтобы получить результаты, вы можете сделать то же самое!

и класс жесткого диска:

public class HardDrive
        {
            public string Model { get; set; }
            public string InterfaceType { get; set; }
            public string Caption { get; set; }
            public string SerialNo { get; set; }
        }

Не забудьте использовать:

using System.Management;

Источник: получить серийный номер жесткого диска в C#

Попробуйте этот код отсюда и дайте нам знать, если он работает:

// Namespace Reference
using System.Management;

/// <summary>
/// method to retrieve the selected HDD's serial number
/// </summary>
/// <param name="strDriveLetter">Drive letter to retrieve serial number for</param>
/// <returns>the HDD's serial number</returns>
public string GetHDDSerialNumber(string drive)
{
    //check to see if the user provided a drive letter
    //if not default it to "C"
    if (drive == "" || drive == null)
    {
        drive = "C";
    }
    //create our ManagementObject, passing it the drive letter to the
    //DevideID using WQL
    ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"" + drive +":\"");
    //bind our management object
    disk.Get();
    //return the serial number
    return disk["VolumeSerialNumber"].ToString();
}

РЕДАКТИРОВАТЬ: И если это не сработает, попробуйте этот код из CodeProject:

Сначала давайте создадим класс для хранения информации о жестком диске:

class HardDrive
{
 private string model = null;
 private string type = null;
 private string serialNo = null; 
 public string Model
 {
  get {return model;}
  set {model = value;}
 } 
 public string Type
 {
  get {return type;}
  set {type = value;}
 } 
 public string SerialNo
 {
  get {return serialNo;}
  set {serialNo = value;}
 }
}

Далее мы запрашиваем класс Win32_DiskDrive:

ManagementObjectSearcher searcher = new
 ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");

foreach(ManagementObject wmi_HD in searcher.Get())
{
 HardDrive hd = new HardDrive();
 hd.Model = wmi_HD["Model"].ToString();
 hd.Type  = wmi_HD["InterfaceType"].ToString();
 hdCollection.Add(hd);
}

Теперь нам нужно извлечь серийный номер из класса Win32_PhysicalMedia:

searcher = new
 ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");

int i = 0;
foreach(ManagementObject wmi_HD in searcher.Get())
{
 // get the hard drive from collection
 // using index
 HardDrive hd = (HardDrive)hdCollection[i];

 // get the hardware serial no.
 if (wmi_HD["SerialNumber"] == null)
  hd.SerialNo = "None";
 else
  hd.SerialNo = wmi_HD["SerialNumber"].ToString();

 ++i;
}

Теперь мы отображаем информацию о нашем жестком диске:

// Display available hard drives
foreach(HardDrive hd in hdCollection)
{
 Console.WriteLine("Model\t\t: " + hd.Model);
 Console.WriteLine("Type\t\t: " + hd.Type);
 Console.WriteLine("Serial No.\t: " + hd.SerialNo);
 Console.WriteLine();
}

Привет только что нашел эту ссылку

Это сработало для меня:

введите описание ссылки здесь

Herre является неотъемлемой частью кода:

  /// <summary>
  /// return Volume Serial Number from hard drive
  /// </summary>
  /// <param name="strDriveLetter">[optional] Drive letter</param>
  /// <returns>[string] VolumeSerialNumber</returns>
  public string GetVolumeSerial(string strDriveLetter)
  {
      if( strDriveLetter=="" || strDriveLetter==null) 
          strDriveLetter="C";
     ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"" + strDriveLetter +":\"");
     disk.Get();
     return disk["VolumeSerialNumber"].ToString();
  }
Другие вопросы по тегам