1

我正在尝试使用 C# 和 WMI 获取物理磁盘序列号

var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
foreach (ManagementObject mo in searcher.Get())
{
    Console.WriteLine("Serial: {0}", mo["SerialNumber"]);
}

此代码显示所有 HDD 和闪存可移动记忆棒的序列号,但它无法在 Windows XP 上获取闪存可移动磁盘,并为可移动磁盘提供空值,但正确获取 HDD 序列号。有什么想法有什么问题吗?

我的想法是 Windows XP 需要更新,有人知道需要更新什么吗?我需要特定的更新以将其包含在我的软件中。

发生这种情况的任何其他原因?

4

1 回答 1

1

据我所知,即使代码正确完成,也不能保证存储设备会报告序列号。过去,我编写了一些许可代码,并在使用 WMI 时在各种环境中遇到了类似的问题。以我的经验,使用低级 API 调用要可靠得多(但它需要更多的编码/测试),但即便如此,你也不能保证能得到一个序列号。

您可能会遇到问题的一些环境(不是完整列表):

  • 视窗
  • 虚拟机
  • SATA 驱动器
  • 其他各种将自己呈现为 HDD 但实际上并非如此的设备
  • 等等

您可以查看Code Project 上的这篇文章,看看它是否更适合您。

如果您尝试为某种许可解决方案执行此操作,您可能需要考虑获取更多硬件信息,以便如果缺少一条信息,您仍然可以使用其他信息。关于欺骗硬盘序列号的内容也值得一读。

于 2013-10-05T13:54:03.360 回答