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

Ваш вопрос возможно подобен , начальная загрузка - имеет раздел 'подкачки' в 'начале' лучше, чем в 'конце'? - Спрашивают Ubuntu

, обсуждение просто указывает, что помещение раздела в 'начинающейся' стороне жесткого диска делает его немного быстрее, чем помещение раздела в конце, потому что, чем ближе блоки к центру диска, тем быстрее и меньше циклы чтения-записи были бы.

8
задан Matthew Scharley 30 August 2009 в 13:45
поделиться

2 ответа

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

// 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 class:

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();
}
2
ответ дан 5 December 2019 в 08:25
поделиться
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;
}
14
ответ дан 5 December 2019 в 08:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: