win32_networkaddressconfiguration没有IP地址

时间:2013-03-04 18:50:09

标签: c# networking ip wmi system.management

我正在从C#中的Win32_NetworkAdapterConfiguration类收集所有网络适配器配置。 我使用这个查询:

private String strDetailedInterfaces =
                       @"SELECT * 
                       FROM   Win32_NetworkAdapterConfiguration
                       WHERE  DHCPEnabled = 'TRUE'";

但是,当选择我用来连接到互联网的网络适配器时,它会显示IPEnabled = false,当我用IPAddresses调用数组时,我得到nullpointerexception(意味着数组= null)

我打电话给这样的地址:

ManagementObject choosen = (ManagementObject)eInterfacesConfig.Current;
String[] ipAddresses = (String[]) choosen["IPAddress"];
lblIP.Text = ipAddresses[0];

eInterfacesConfigManagementObjectCollection.Enumerator和 选择是枚举器中的当前ManagementObject

我尝试将标签(lblIP)的文本更改为数组中的第一个Ip地址。但这就是异常抛出的地方。

有人可以解释原因,也许可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

以下查询返回两个Win32_NetworkAdapterConfiguration个对象 在我的Windows 8机器上:

ManagementObjectSearcher query = 
    new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration  WHERE DHCPEnabled ='TRUE'");

ManagementObjectCollection queryCollection = query.Get();
queryCollection = query.Get();

foreach (ManagementObject currentConfig in queryCollection)
{
  string[] addresses = (string[])currentConfig["IPAddress"];

  Console.Out.WriteLine(currentConfig["Description"]);
  if (addresses != null)
  {
    foreach (var addr in addresses)
    {
      Console.Out.WriteLine(addr);
    }
  }
}

第一个适配器配置适用于 Microsoft内核调试网络适配器。 此适配器用于远程内核调试。 DHCPEnabled属性 这个适配器是TRUE。但是没有IP地址 分配给此适配器。这就是IPAddress数组为空的原因。

第二个适配器配置适用于我的 Intel千兆网络适配器。那里 是分配给适配器的两个IP地址。

IPAddress数组可能为null的另一个原因是 例如断开连接的无线网络适配器

所以,为了解决你的NullReferenceException,你必须检查 IPAddress数组为null(请参阅上面的代码)。使用Description 用于标识适配器配置的属性。