C# 无法使用Win32\U DiskDrive获取系统硬盘驱动器序列号

C# 无法使用Win32\U DiskDrive获取系统硬盘驱动器序列号,c#,winforms,wmi,C#,Winforms,Wmi,我正在使用以下代码获取驱动器序列号。它在Windows7、8、8.1和10 Professional上运行良好,但在Windows10 Home上出现了一个错误 ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"); foreach (ManagementObject wmi_HD in searcher.Get()) { if (wmi_HD[

我正在使用以下代码获取驱动器序列号。它在Windows7、8、8.1和10 Professional上运行良好,但在Windows10 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、磁盘或任何其他资源运行的

当我转到设备管理器时,我看到:


我之所以添加此选项作为答案,是因为在WMI中调试类似
System.NullReferenceException
的场景时,它可以节省大量时间

  • Windows+R(运行命令)
  • 类型wbemtest

  • 并连接到要获取其信息的计算机。启动对Win32_DiskDrive的查询,并检查可获取的属性的输出。

    这是我在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();
            }
        }
    }
    
    详情请参阅


    对于给定的关联链接,我无法找到
    HardDrive hd=new HardDrive()所需的程序集参考

    可能重复使用
    Win32_PhysicalMedia
    而不是
    Win32_DiskDrive
    @ADreNaLiNe DJ不,它不能与
    Win32_PhysicalMedia
    @ADreNaLiNe DJ一起使用查看此链接,检查标题
    家长控制WMI类
    ,在Windows 10中为桌面完成的测试在Win32_PhysicalMedia中是错误的,正如我所说,正确使用“Windows 10 pro”但不使用“Windows 10 home”是从WMI获取的最佳方法。非常感谢。