我目前正在编写一个必须远程控制某些设备(它们的服务和硬件,例如 Lan 端口)的小程序。我用谷歌搜索并阅读了很多关于 WMI 的信息,现在我正在尝试制作我的程序。
但是我找不到 Win32_NetworkAdapter 类的引用命名空间。我已经将 System.Management 和 Microsoft.Win32 导入到项目中,但 SDK 仍然告诉我找不到 Win32_NetworkAdapter。
我在这里错过了什么?
附言。我正在使用 Windows XP、VS Express 2010 Express for dev。
感谢您的帮助。
这是我的自动取款机代码:
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";
}
}
}
我在 Debug模式下运行它,我发现 obj 的属性(Classpath、Options、Path、Scope)显示错误消息:
Function evaluation disabled because a previous function evaluation timed out. You must continue execution to reenable function evaluation.
有什么想法吗?
最佳答案
WMI“类”不是 C# 意义上的类。他们选择那个名词是因为它们很像一个类。它们具有名称、属性和方法,就像 C# 类一样。
在引擎盖下它是一个 COM 接口(interface)。这也解释了您收到的调试器警告,COM 接口(interface)具有线程关联性。调试器在单独的线程(调试器线程)上计算监视表达式。当断点处于事件状态时可能会死锁,访问接口(interface)的线程会被调试器卡住。这不是真正的问题,只是带来不便。
不清楚您遇到的问题类型,如果 Win32_NetworkAdapter 查询未返回某些内容,您将无法获得调试器警告。将名称弄错是有可能的,请注意您的代码如何只能意外地在另一台机器上运行。而且 WMI 确实往往不稳定,它严重依赖驱动程序返回信息,而驱动程序并非生而平等。它们的质量大致与您在硬件上花费的金额成正比。到目前为止,试验和测试 WMI 查询的最佳方法是使用 WMI Code Creator utility .它允许您执行任意查询,甚至可以选择自动生成您需要的 C# 代码。强烈推荐。
关于c# - visual studio C# express 中 Win32_NetworkAdapter 的引用命名空间是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9428021/