繁体   English   中英

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

[英]How to disable (or reset) a network adapter programmatically in C#

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

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

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

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系列控制器”:

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.

注意 Netsh一样,这需要提升才能执行禁用(但对于查询而言则不需要)。

尝试这个:

netsh interface set interface "YOUR_ADAPTOR" DISABLED

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

语法将是

devcon disable *hardware ID of your adapter*

您将获得HWID(以及许多其他详细信息),其中包括

wmic NIC

或者,如果您可以在XP机器上访问Powershell,则可以使用它,因为您可以在那里很好地过滤ir。 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更简单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM