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

问题描述:

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

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

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

+0

我记得在网络驱动程序在我的笔记本电脑上工作得并不是很好时,在Windows 7中寻找可以做到这一点的选项。然后我的研究发现,如果它被设置为自动获取IP(即动态地址),这是不可能的。我相信XP也是一样,只是你知道。 –

试试这个:

netsh interface set interface "YOUR_ADAPTOR" DISABLED 
+0

“YOUR_ADAPTOR”这里是设备管理器中看到的名称吗?或实例ID ??。因为我在执行你的建议 –

+0

@ this-Me时收到错误“这个名称的界面没有在路由器上注册”,我想它是名称,请参考'netsh interface show interface'的输出。 –

+0

适配器的名称:) – unruledboy

netsh interface set interface "YOUR_ADAPTOR" DISABLED

注:注意把握XP,但是在Windows Vista/Windows 7中,这将只具有管理员权限的命令提示符下运行工作(”以管理员身份运行“选项)。

+0

+1用于注意UAC标高要求。 – Richard

如果您想使用设备管理器中显示的名称,可能会更容易使用WMI。查询

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

将选择一个Disable方法WMI object

像这样涉及的设备名称为 “瑞昱的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. 

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

+0

我想你必须像这样替换第三行var nicObj = found.Cast ()。First(); – prabhakaran

这取决于您试图禁用的内容。如果你试图禁用局域网的网络接口,那么XP机器上的唯一可能性(据我所知)以编程方式使用devcon.exe(与设备管理器commandlline工具类似的程序)。

语法将

devcon disable *hardware ID of your adapter* 

您与

wmic NIC 

得到HWID(与许多其他详细信息),或者如果你有你的XP机器*问PowerShell的,你可以使用因为你可以在那里很好地过滤。 wmic NIC没有别的比输出使用WMI禁用或启用适配器的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*"} 

问题的结果是,它是由设备驱动程序来实现Disable()Enable()方法,所以你不能真的依靠它的工作。

我不知道netsh如何适用于蓝牙适配器和其他设备,但我肯定会建议您尝试一下,因为它比使用devcon和查找HWID更简单。