如何在C#中获取硬盘的唯一序列号

6

我正在为一个系统开发激活功能。为了生成请求代码,我使用了硬盘ID、BIOS ID和处理器ID。我使用以下代码获取硬盘ID。

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值就会改变。如何获取硬盘的唯一序列号呢?谢谢提前。


4
返回语句中的最后一个 .ToString() 是无用的。 - xanatos
http://www.codeproject.com/Articles/16941/Get-Physical-HDD-Serial-Number-without-WMI - ashkufaraz
3个回答

3

您可以尝试从这个中获取信息:

如源中所述,更好的解决方案是获取制造商提供的硬盘序列号。即使您格式化硬盘,该值也不会改变。

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

3
硬盘的参考是什么? - pixparker
有没有其他方法可以获取序列号? - Toni

2
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);

你应该解释一下你提供的代码是做什么的,它如何帮助解决问题。 - Nae

0
请查看以下代码以获取硬盘序列号。
  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;

   }

你也可以在Windows运行中输入“wbemtest”。WBEMTEST是一个工具,可帮助运行WQL查询。

我得到了上面的代码。但是我有一个疑问。这段代码是否适用于硬盘?它返回14个字符的字符串。 - JayNaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接