我对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(成功),但之后检查它再次/仍然禁用。