C#通过它的序列号

时间:2017-05-26 12:30:01

标签: wmi hard-drive

我正在使用C#并在Visual Studio 2015上工作。 我需要从它的序列号中获取一个Connected USB驱动器的名称。 我尝试使用WMI Class查询:“SELECT * FROM Win32_LogicalDisk”

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

        foreach (ManagementObject item in searcher.Get())
        {
            if (item != null && item["VolumeSerialNumber"] != null && item["VolumeName"] != null)
            {
                if (item["VolumeSerialNumber"].ToString() == "50D76BF4")
                {
                    Console.WriteLine($"{item["VolumeName"]} Is Connected and It's Letter is {item["Name"]}");
                }
            }          
        }    

但是,VolumeSerialNumber不是真正的序列号。格式化磁盘时会更改。

1 个答案:

答案 0 :(得分:1)

好的我明白了。

我写了一种方法,用来重新标记硬盘驱动器的名称和字母真实且不可变的 ID。

您需要参考System.Management

这是代码:

 public static string GetDriveLetterAndLabelFromID(string id)
    {
         ManagementClass devs = new ManagementClass(@"Win32_Diskdrive");
        {
            ManagementObjectCollection moc = devs.GetInstances();
            foreach (ManagementObject mo in moc)
            {
                string a = (string)mo["SerialNumber"];
                if (a== id)
                {
                    foreach (ManagementObject b in
                    mo.GetRelated("Win32_DiskPartition"))
                    {
                        foreach (ManagementBaseObject c in b.GetRelated("Win32_LogicalDisk"))
                    {
                        string result = $"HardDrive Name: {c["VolumeName"].ToString()}\nHardDrive Letter: {c["DeviceID"]}";                           
                        return result;
                    }
                    }
                }
            }
        }
        return null;
    }