2012-04-03 82 views
4

对于我正在编写的应用程序,我需要更改网络适配器的一些参数 ,包括启用/禁用DHCP。 为此,我使用了“SetIpConfig”命令从这个源代码:Delphi和WMI Networking

SetIPConfig

它工作得很好,做我所需要的,如果网络适配器连接。 问题是我不能启用DHCP,如果LAN电缆拔掉, ,而我可以正确更改其他参数,如IP或网关。 当我尝试启用DHCP,而网络适配器断开,我 得到OLE错误:

94 Path, file, or object not found

我认为它应该反正工作,即使网卡断开,因为 我能正确地做到这一点,进入网卡/ IP属性窗口(使用XP)。

这里将描述正是我的问题:

http://www.neowin.net/forum/topic/515984-c-enabling-dhcp-on-nic-through-wmi/

的那个家伙一样,我试图改变直接寄存器键激活 的DHCP但是,即使在网络适配器的属性,值 被正确更改,NIC的行为像没有改变,像 的变化没有“应用”到它。

这里的另一个话题相关:

www.winvistatips.com/wmi-config-fails-ethernet-cable-unplugged-t181330.html

他们建议禁用dhcpsense把钥匙插入 HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \服务\ TCPIP \参数 命名DisableDHCPMediaSense(DWORD),并将其设置为1

Ok..it现在的工作,我没有尝试全部功能的DHCP,只是我见过 它可以启用与nic拔掉,但作为某人写道,我不认为 禁用dhcp意义是一个好主意。 这意味着dhcp客户端无法知道连接状态,所以我认为 它可能在更新租约时遇到麻烦,如果连接断开,那么 会再次建立。

操作系统:XP SP3 语言:DelphiXE

有什么不对? 非常感谢。

+0

哪个操作系统版本? – RBA 2012-04-03 18:30:53

+0

如果它解决了您的问题,请不要忘记接受答案['This way way](http://meta.stackexchange.com/a/5235/179541)。它将为未来的游客确认正确的答案,并解决同样的问题。谢谢! – TLama 2012-04-04 13:49:05

回答

5

这似乎是一个WMI的限制(或错误?),当设备断开连接时(前一段时间我在另一个论坛也看到类似的报告)。至于解决方法,只是对于这种特殊情况下(未连接设备时),你可以尝试使用无证DhcpNotifyConfigChange功能或直接使用Windows注册表

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{Adapter-guid_goes_here} 
+0

好的,它的工作原理! 您首先需要更改适配器的注册表条目,然后调用DhcpNotifyConfigChange将已完成的更改 修改为注册表。 好处是它比使用WMI好得多, 不好的是它是一个无证函数。 微软使WMI正常工作会更好。 – 2012-04-04 09:02:23