如何在C#中以编程方式禁用(或重置)网络适配器

我需要在Windows XP Embedded上使用C#(.NET 2.0)以编程方式禁用网络适配器。

背景原因 :在PC上安装蓝牙堆栈后,蓝牙PAN适配器会阻止蓝牙管理器程序(在系统托盘中运行)。 如果我禁用蓝牙PAN,那么蓝牙管理器工作正常。

此问题仅在Windows XP Embedded计算机上发生。

试试这个:

netsh interface set interface "YOUR_ADAPTOR" DISABLED 

netsh interface set interface "YOUR_ADAPTOR" DISABLED

注意:请注意确保XP,但在Windows Vista / Windows 7中,这仅适用于以管理员权限运行的命令提示符(“以管理员身份运行”选项)。

如果要使用设备管理器中显示的名称,则可能更容易使用WMI。 一个问题

 SELECT * FROM Win32_NetworkAdpater WHERE NName='name from device mnanager' 

将使用Disable方法选择WMI对象 。

鉴于设备名称为“Realtek PCIe GBE Family Controller”,这样的东西:

 var searcher = new ManagementObjectSearcher("select * from win32_networkadapter where Name='Realtek PCIe GBE Family Controller'"); var found = searcher.Get(); var nicObj = found.First() as ManagementObject; // Need to cast from ManagementBaseObject to get access to InvokeMethod. var result = (uint)nicObj.InvokeMethod("Disable"); // 0 => success; otherwise error. 

NB 。 像Netsh这将需要提升来执行禁用(但不是查询)。

这取决于您要禁用的内容。 如果您尝试禁用LAN网络接口,那么在XP机器上(据我所知)以编程方式执行此操作的唯一可能是使用devcon.exe (类似于设备管理器commandlline实用程序的程序)。

语法是

 devcon disable *hardware ID of your adapter* 

您可以获得HWID(以及许多其他详细信息)

 wmic NIC 

或者如果您可以在XP机器上访问Powershell,那么您可以使用它,因为您可以很好地过滤掉它。 wmic NIC除了输出Select * From Win32_NetworkAdapter的结果外别无其他

 gwmi win32_networkAdapter | select Name, PNPDeviceID | where {$_.Name -eq "*your adapter name*"} 

要么

 gwmi -query "select Name, PNPDeviceID from Win32_Networkadapter" | where {$_.Name -eq "*your adapter name*"} 

使用WMI禁用或启用适配器的问题在于,设备驱动程序可以实现Disable()Enable()方法,因此您无法真正依赖它工作。

我不知道netsh对蓝牙适配器和其他设备的效果如何,但我肯定会建议你尝试一下,因为它比使用devcon并且不得不查找HWID要简单得多。