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

时间:2012-02-24 09:03:26

标签: c# wmi

我目前正在编写一个小程序,必须远程控制某些设备(他们的服务和硬件,如Lan端口)。我用Google搜索并阅读了很多关于WMI的信息,现在我正在努力制作我的程序。

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

我在这里缺少什么?

PS。我正在使用Windows XP,VS Express 2010 Express for dev。

感谢您的帮助。


这是我的代码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的属性(Classpath,Options,Path,Scope)显示错误消息:

  

由于先前的功能评估,功能评估被禁用   时间到。您必须继续执行以重新启用功能   评价。

任何想法?

3 个答案:

答案 0 :(得分:3)

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

它是一个COM界面。这也解释了你得到的调试器警告,COM接口具有线程关联性。调试器在单独的线程(调试器线程)上计算监视表达式。当断点处于活动状态时会出现死锁,调试器会冻结访问接口的线程。这不是一个真正的问题,只是给您带来不便。

目前尚不清楚您遇到了什么样的问题,如果Win32_NetworkAdapter查询未返回某些内容,您将无法获得调试器警告。获取名称出现错误的可能性,请注意您的代码如何只能偶然在另一台机器上运行。并且WMI确实往往是片状的,它严重依赖于驱动程序来返回信息并且驱动程序不是平等的。它们的质量大致与您在硬件上花费的金额成正比。到目前为止,实验和测试WMI查询的最佳方法是使用WMI Code Creator utility。它允许您执行任意查询,甚至可以选择自动生成所需的C#代码。强烈推荐。

答案 1 :(得分:1)

您可以使用@Wiktor Zychla建议使用它们,使用mgmtclassgen.exe生成强类型C#类。另请参阅此SO question/answer以获取有关该主题的更多信息和链接。

答案 2 :(得分:0)

您不要在C#中使用WMI类作为类。而是将类名传递给WMI查询方法:

var search = new ManagementObjectSearcher( "SELECT * FROM Win32_NetworkAdapter" );