无法使用 Win32_DiskDrive 获取系统硬盘序列号

3
我正在使用以下代码获取我的驱动器序列号。它在Windows 7、8、8.1和10专业版上运行良好,但在Windows 10家庭版上出现错误。
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:对象引用未设置为对象的实例。

有人知道为什么吗?在这种情况下,我需要做什么才能得到序列号?
还有一个问题:如果我从U盘启动操作系统,这段代码能用吗?我如何知道操作系统是从U盘、磁盘或其他任何资源运行的?
当我打开设备管理器时,看到了这个:

enter image description here


可能是获取硬盘序列号的重复问题。 - ADreNaLiNe-DJ
请使用 Win32_PhysicalMedia 而不是 Win32_DiskDrive - ADreNaLiNe-DJ
@ADreNaLiNe-DJ 不行,它不能与 Win32_PhysicalMedia 一起使用。 - Pranav Patel
@ADreNaLiNe-DJ 请查看此链接 https://msdn.microsoft.com/zh-cn/library/windows/hardware/dn904985(v=vs.85).aspx,检查标题为“家长控制 WMI 类”的内容,在 Win32_PhysicalMedia 中,Windows 10 桌面版的测试已完成 是错误的。 - Pranav Patel
@ADreNaLiNe-DJ,正如我所说,它在“Windows 10 Pro”上可以正常工作,但在“Windows 10 Home”上无法工作。 - Pranav Patel
2个回答

5

我将这个答案添加进来是因为在调试像WMI中的System.NullReferenceException等情况时,它可以节省很多时间。

  1. 按下Windows+R(运行命令)
  2. 输入wbemtest

连接到您想要获取信息的计算机。执行Win32_DiskDrive查询并检查可获取的属性的输出。


得到从 WMI 获取信息的最佳方式。谢谢。 - Pranav Patel

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/以获取详细信息。
对于由@ADreNaLiNe-DJ提供的Get Hard disk serial Number相关链接,我无法找到所需的程序集引用HardDrive hd = new HardDrive();

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