C# 无法使用Win32\U DiskDrive获取系统硬盘驱动器序列号
我正在使用以下代码获取驱动器序列号。它在Windows7、8、8.1和10 Professional上运行良好,但在Windows10 Home上出现了一个错误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[
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
的场景时,它可以节省大量时间
并连接到要获取其信息的计算机。启动对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获取的最佳方法。非常感谢。