无法使用Win32_DiskDrive获取系统硬盘SerialNumber

时间:2016-06-10 05:32:56

标签: c# winforms wmi

我使用以下代码获取驱动器序列号。它适用于Windows 7,8,8.1和10 Professional,但我在Windows 10 Home上收到错误。

ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
foreach (ManagementObject wmi_HD in searcher.Get())
{
     if (wmi_HD["SerialNumber"] == null)
          hddId = null;
     else
          hddId = wmi_HD["SerialNumber"].ToString();
}

我正在

  

System.NullReferenceException:未将对象引用设置为对象的实例。

有谁知道为什么?在这种情况下,我需要做什么来获取序列号?

还有一个问题:如果我从我的pendrive启动操作系统,这段代码会起作用吗?我怎么知道操作系统是从pendrive或磁盘或任何其他资源运行的?

当我进入设备管理器时,我看到了:

enter image description here

2 个答案:

答案 0 :(得分:4)

我添加这个作为答案,因为它可以在调试 WMI 中的System.NullReferenceException等方案时节省大量时间。

  1. Windows + R(运行命令)
  2. 输入 wbemtest
  3. 并连接到要获取信息的计算机。触发 Win32_DiskDrive 的查询,并检查输出以获取可以获取的属性。

答案 1 :(得分:0)

这是我在Windows 10 v1809上使用的:

using System;
using System.Management;

namespace GetSerialNo
{
    class Program
    {
        static void Main(string[] args)
        {
            ManagementObjectSearcher searcher =
                new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");

            foreach (ManagementObject info in searcher.Get())
            {
                Console.WriteLine("DeviceID: " + info["DeviceID"].ToString());
                Console.WriteLine("Model: " + "Model: " + info["Model"].ToString());
                Console.WriteLine("Interface: " + "Interface: " + info["InterfaceType"].ToString());
                Console.WriteLine("Serial#: " + "Serial#: " + info["SerialNumber"].ToString());
            }

            Console.ReadLine();
        }
    }
}

有关详细信息,请参见http://csharphelper.com/blog/2017/10/get-hard-drive-serial-number-c/

对于Get Hard disk serial Number给出的关联链接@ADreNaLiNe-DJ,我找不到HardDrive hd = new HardDrive();所需的程序集引用