对于我正在编写的应用程序,我需要更改一些参数
网络适配器,包括启用/禁用 DHCP。
为此,我正在使用此源代码中的“SetIpConfig”命令:
SetIPConfig
如果连接了网络适配器,它运行良好并且可以满足我的需求。
问题是如果拔掉 LAN 电缆,我将无法启用 DHCP,
而我可以正确更改其他参数,例如 IP 或网关。
当我尝试启用 dhcp 时,当网络适配器断开连接时,我
得到 ole 错误:
我认为它无论如何都应该工作,即使网卡断开连接,因为
我可以正确执行此操作,进入网卡/ip 属性窗口(使用 XP)。
这里准确描述了我的问题:
http://www.neowin.net/forum/topic/515984-c-enabling-dhcp-on-nic-through-wmi/
就像那个人所做的那样,我尝试直接更改注册 key 以激活
DHCP 但是,即使在网络适配器属性上,值
已正确更改,NIC 的行为就像没有任何更改,例如
更改并未“应用于”它。
这里另一个主题相关:
www.winvistatips.com/wmi-config-fails-ethernet-cable-unplugged-t181330.html
他们建议禁用 dhcpsense 将 key 放入
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters
命名为 DisableDHCPMediaSense (DWORD) 并将其设置为 1。
好的..它现在可以工作了,我没有尝试完整的 dhcp 功能,只是我看到了
它可以在 nic 不插电的情况下启用,但正如有人写的那样,我不认为
禁用 dhcp 感知是一个好主意。
这意味着 dhcp 客户端无法知道连接状态,所以我认为
如果连接断开,它可能会在续订租约时遇到麻烦,然后
再次确立。
操作系统:XP SP3
语言:DelphiXE
怎么了 ?
非常感谢。
最佳答案
当设备断开连接时,这似乎是 WMI 限制(或错误?)(前一段时间我在另一个论坛中也看到了类似的报告)。作为解决方法,仅针对这种特殊情况(当设备未连接时),您可以尝试使用未记录的 DhcpNotifyConfigChange
函数或直接使用 Windows 注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{Adapter-guid_goes_here}
关于Delphi 和 WMI 网络,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9998621/