C# 使用ManagementObjectSearcher获取MAC地址

C# 使用ManagementObjectSearcher获取MAC地址,c#,windows-8,windows-7,wmi,mac-address,C#,Windows 8,Windows 7,Wmi,Mac Address,我正在尝试用C#开发一个注册算法。我使用客户机的MAC地址生成请求代码。功能如下所示。但在Windows7中,此函数在这一行中显示一个nullreReferenceException mac = mo["MACAddress"].ToString(); public string GetMACAddress() { string mac = null; ManagementObjectSearcher mos = new ManagementObjectSearcher

我正在尝试用C#开发一个注册算法。我使用客户机的MAC地址生成请求代码。功能如下所示。但在Windows7中,此函数在这一行中显示一个
nullreReferenceException

mac = mo["MACAddress"].ToString();

public string GetMACAddress()
{
      string mac = null;
      ManagementObjectSearcher mos = new ManagementObjectSearcher("select * from Win32_NetworkAdapterConfiguration");
      foreach (ManagementObject mo in mos.Get())
      {
           mac = mo["MACAddress"].ToString();
           break;
      }

      return mac;
}

在Windows 7和Windows 8中,为了开发激活算法,使用C#获取MAC地址最可靠的方法是什么?

并非所有对象内容都是MAC地址,因此需要检查哪一个具有MAC地址

你可以做这样的事情

string macAddress = String.Empty;
foreach (ManagementObject mo in mos.Get())
 {
      object tempMacAddrObj = MO["MacAddress"];

    if (tempMacAddrObj == null) //Skip objects without a MACAddress
    {
        continue;
    }
    if (macAddress == String.Empty) // only return MAC Address from first card that has a MAC Address
    {
        macAddress = tempMacAddrObj.ToString();              
    }
    objMO.Dispose();
 } 

为了激活许可证,我实际上建议在MAC地址之外使用其他(或附加)内容,因为这很容易被欺骗。这里有一个非常好的C#教程,介绍如何获取“硬件指纹”来解决您的问题:

Related:您想要哪一个?可能有几个适配器,您只需要第一个适配器,不管它是什么。可能与操作系统无关,但机器设置我希望获得以太网MAC地址。原因是,有些台式电脑没有无线适配器。