使用C#和WMI从未插入的NIC查询IP地址

时间:2015-04-04 21:31:47

标签: c# wmi

我对VS 2013,C#和WMI有点新手,虽然我熟悉C和C ++以及Linux脚本。我正在尝试查询可能插入或未插入的笔记本电脑中有线网络接口的IP地址。这个网络接口,但没有其他网络接口,将被程序多次修改,所以我试图如果可以的话,请避免使用MO Searcher / Collection,因为搜索似乎每次都需要几秒钟。所以我这样做:

string WMIQuery = null;
string NICIndex = "7"; //found and set by earlier code
WMIQuery = String.Format("Win32_NetworkAdapterConfiguration.Index='{0}'", NICIndex);

ManagementObject NICConfig = new ManagementObject(@"root\CIMV2", WMIQuery, null);

if (NICConfig["DHCPEnabled"].ToString() == "False")
{
    string[] x = (string[])NICConfig["IPAddress"];
    foreach (string y in x)
    {
        Console.WriteLine(y);
    }
}

如果已插入NIC,则此方法有效,但如果不是,则会引发异常,“对象引用未设置为对象的实例”。

然后我尝试查询是否启用了NIC(如果没有,我会尝试启用它):

WMIQuery = String.Format("Win32_NetworkAdapter.Index='{0}'", NICIndex);
ManagementObject NICAdapter = new ManagementObject(@"root\CIMV2", WMIQuery, null);

Console.WriteLine(NICAdapter["NetEnabled"].ToString()); //throws exception

这给了我错误“无效的对象路径”,无论它是否已插入。

我已经在这个问题上打了几天了,有人可以帮帮我吗?

编辑:发现第二部分的问题,它应该是"Win32_NetworkAdapter.DeviceID='{0}'",似乎DeviceID与索引相同(我还需要确认)。我仍然可以使用第一部分的手,我尝试启用NIC并且启用方法返回0(成功),但之后检查它再次/仍然禁用。

0 个答案:

没有答案