我需要在 Windows XP Embedded 上使用 C# (.NET 2.0) 以编程方式禁用网络适配器。
背景原因:在 PC 上安装蓝牙堆栈后,蓝牙 PAN 适配器阻止了蓝牙管理器程序(在系统托盘中运行)。如果我禁用蓝牙 PAN,那么蓝牙管理器工作正常。
此问题仅在 Windows XP Embedded 计算机上发生。
我需要在 Windows XP Embedded 上使用 C# (.NET 2.0) 以编程方式禁用网络适配器。
背景原因:在 PC 上安装蓝牙堆栈后,蓝牙 PAN 适配器阻止了蓝牙管理器程序(在系统托盘中运行)。如果我禁用蓝牙 PAN,那么蓝牙管理器工作正常。
此问题仅在 Windows XP Embedded 计算机上发生。
尝试这个:
netsh interface set interface "YOUR_ADAPTOR" DISABLED
如果您想使用设备管理器中显示的名称,使用 WMI 可能会更容易。一个问题
SELECT * FROM Win32_NetworkAdpater WHERE NName='name from device mnanager'
给定设备名称“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
注意:请注意 XP,但在 Windows Vista / Windows 7 中,这仅适用于以管理员权限运行的命令提示符(“以管理员身份运行”选项)。
这取决于您要禁用的内容。如果您尝试禁用 LAN 网络接口,那么在 XP 机器上(据我所知)以编程方式执行此操作的唯一可能性是使用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 更简单。