慎用 IsNetworkAlive 检测网络状态

使用 IsNetworkAlive 函数检测网络是否已连接的代码

DWORD dwFlags = NETWORK_ALIVE_WAN;
BOOL bSuccess = IsNetworkAlive(&dwFlags);
if ((GetLastError() == ERROR_SUCCESS) && bSuccess)
...

但这个函数是依赖于 SENS 服务的, 一旦服务处于停止状态,函数就无法正常工作

如果要使用这个函数,起码要在此之前先检查 SENS 服务的运行状态,当服务处于运行中时再使用此函数。
但是即便如此,函数也无法保证网络已经接入互联网,因为如果系统上有虚拟网卡的话则会产生误判,较为典型的情况是系统上装有VMWare虚拟机或VPN等软件的时候,它们通常会创建若干虚拟网卡,这都影响了 IsNetworkAlive 函数的工作,所以不要用它来检测网络状态。

参考

IsNetworkAlive function
About System Event Notification Service
获取网络连接状态(二) IsNetworkAlive

posted @ 2021-12-18 12:10  从一到十  阅读(223)  评论(0)    收藏  举报