Visual Studio C#express中Win32_NetworkAdapter的引用命名空间是什么?
收藏

提问

我目前正在编写一个小型程序,该程序必须远程控制某些设备(它们的服务和硬件,例如Lan端口).我已经在Google上搜索并阅读了许多有关WMI的信息,现在我正在尝试制作程序.

但是我找不到Win32_NetworkAdapter类的引用命名空间.我已经将System.Management和Microsoft.Win32导入到项目中,但是SDK仍然告诉我找不到Win32_NetworkAdapter.

我在这里想念什么?

PS.我正在使用Windows XP,VS Express 2010 Express进行开发.

谢谢你的帮助.

这是我的代码atm:

string manage = "SELECT * From Win32_NetworkAdapter";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(manage);
ManagementObjectCollection collection = searcher.Get();

foreach (ManagementObject obj in collection)
{
    if (obj["Name"].ToString() != null)
    {
        if (obj["Name"].ToString() == "Realtek RTL8168C(P)/8111C(P) PCI-E Gigabit Ethernet NIC")
        {
            obj.InvokeMethod("Disable", null);
            textBox3.Text += "finished";
        }
    }
}

我在调试模式下运行它,发现obj的属性(类路径,选项,路径,范围)显示错误消息:

Function evaluation disabled because a previous function evaluation
timed out. You must continue execution to reenable function
evaluation.

有任何想法吗?

最佳答案

WMI“类”不是C#意义上的类.他们之所以选择该名词,是因为它们类似于一个类.它们具有名称,属性和方法,就像C#类一样.

引擎盖下是一个COM接口.这也解释了您收到的调试器警告,COM接口具有线程相似性.调试器在单独的线程(调试器线程)上计算监视表达式.当您有一个断点处于活动状态时,这可能会死锁,访问接口的线程会被调试器冻结.这不是一个真正的问题,只是带来的不便.

目前尚不清楚您遇到的是哪种问题,如果Win32_NetworkAdapter查询未返回任何内容,您将无法得到该调试器警告.小心地弄错名称是一种可能,请注意您的代码如何仅在偶然的情况下只能在另一台机器上工作.而且WMI确实很不稳定,它严重依赖于驱动程序来返回信息,并且驱动程序的创建不均等.它们的质量大致与您在硬件上花费的金钱成正比.到目前为止,测试和测试WMI查询的最佳方法是使用WMI Code Creator utility.它可以让您执行任意查询,甚至可以自动生成所需的C#代码.强烈推荐.

    公众号
    关注公众号订阅更多技术干货!