c# - WMI 报告非唯一处理器 ID、硬盘驱动器 ID 和 MAC 地址

标签 c# wmi

我们有以下代码来检索硬盘 id 处理器 id 和 mac 地址:

    private static string GetWMIValue(string query, string propertyName)
{
  try
  {
    using (ManagementObjectSearcher search = new ManagementObjectSearcher(query))
    {
      using (ManagementObjectCollection results = search.Get())
      {
        foreach (var result in results)
        {
          if (result != null && result[propertyName] != null)
          {
            return result[propertyName].ToString();
          }
        }
      }
    }
  }
  catch
  {
    // do nothing.
  }

  return null;
}

public static string GetHardDriveSerialNumber()
{
  string driveLetterName = Assembly.GetExecutingAssembly().Location.Substring(0, 1);
  return GetWMIValue("SELECT VolumeSerialNumber FROM Win32_LogicalDisk WHERE DeviceID=\"" + driveLetterName + ":\"", "VolumeSerialNumber");
}

public static string GetProcessorId()
{
  return GetWMIValue("SELECT ProcessorId FROM Win32_Processor", "ProcessorId");
}

public static string GetMacAddress()
{
  return GetWMIValue("SELECT MacAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = TRUE", "MacAddress");
}

除了在一个特定品牌的平板电脑上(据我们所知),这工作正常。在这个品牌上,每台机器都有相同的 3 个值。您可以想象,这在某种程度上与我们的许可有关。

有没有人见过这个或者有没有人有更好更可靠的机制?

谢谢

最佳答案

经过更多研究后,这似乎是一个广为人知且广为讨论的问题。我需要做一些工作...

幸运的是,这不是我造成的 :) 我只需要修复它 :(

关于c# - WMI 报告非唯一处理器 ID、硬盘驱动器 ID 和 MAC 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9833330/

相关文章:

c# - 如何获取有关最近连接的 USB 设备的信息?

c# - 在 C# 中查找有关通过 USB 连接的所有串行设备的信息

C# 是否可以在我的 dot net 网站中为代码隐藏和类创建一个可访问的命名空间

c# - 如何判断进程是否具有图形界面?

python - 使用 Python 获取 Windows 8.1 进程列表

c# - 在 MSI 包上执行批处理命令

C# 相当于 VB6 'Type'

c# - 在 C# 中对 TextBox 实现输入限制的最佳方法是什么?

c# - 列表在新表单后返回 0

c# - 这个时间值是什么格式?