我使用以下代码获取驱动器序列号。它适用于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或磁盘或任何其他资源运行的?
当我进入设备管理器时,我看到了:
答案 0 :(得分:4)
我添加这个作为答案,因为它可以在调试 WMI 中的System.NullReferenceException
等方案时节省大量时间。
并连接到要获取信息的计算机。触发 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();
所需的程序集引用