2015-04-27 3 views
4

Я разработал активацию для системы. для генерации кода запроса я использовал идентификатор жесткого диска, идентификатор Bios и идентификатор процессора. Я использовал следующий код для получения идентификатора жесткого диска.Как получить уникальный серийный номер жесткого диска в C#

private string getHardDiskID() 
{ 
    string hddID = null; 
    ManagementClass mc = new ManagementClass("Win32_LogicalDisk"); 
    ManagementObjectCollection moc = mc.GetInstances(); 
    foreach (ManagementObject strt in moc) 
    { 
     hddID += Convert.ToString(strt["VolumeSerialNumber"]); 
    } 
    return hddID.Trim().ToString(); 
} 

Но если я подключаю съемный диск, это значение ID изменяется. Как получить UNIQUE серийный номер жесткого диска ...? Заранее спасибо ..

+4

Окончательный '.ToString()' в образе бесполезен. – xanatos

+0

http://www.codeproject.com/Articles/16941/Get-Physical-HDD-Serial-Number-without-WMI – ashkufaraz

ответ

2

Вы можете попробовать из этого source:

Как сказано в источнике, лучшего решения, чтобы получить серийный номер жесткого диска, указанный изготовителем. Это значение не изменится, даже если вы отформатируете жесткий диск.

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; 
    } 
+0

Что такое ссылка HardDrive – pixparker

0

Проверить ниже код, чтобы получить HDD Серийный

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

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

    int i = 0; 

    foreach(ManagementObject wmi_HD in objSearcher.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; 

    } 

Также Вы можете ввести "WBEMTEST" в окнах запуска. WBEMTEST - это инструмент, который помогает в выполнении запросов WQL.

+0

Я получил код выше. Но у меня есть сомнения. Является ли этот код UNIQUE для жесткого диска ..? Он возвращает 14 символов. – JayNaz

+0

@Jayashan [Является ли серийный номер жесткого диска глобально уникальным?] (Http://serverfault.com/questions/300448/is-a-hard-drives-serial-number-globally-unique) –

0
ManagementObjectSearcher searcher; 

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

     foreach (ManagementObject wmi_HD in searcher.Get()) 
     { 

      serial_number = wmi_HD["SerialNumber"].ToString(); 


     } 

     MessageBox.Show(serial_number); 
+0

Вы должны объяснить, что такое код вы предоставили, как это помогает решить проблему. – Nae

Смежные вопросы