如何使用WMI命令检查系统是否连接到Internet?

时间:2013-05-09 06:03:53

标签: c# winforms

在我的winforms应用程序中,我需要检查系统是否已连接到互联网。 目前我正在使用

        try
        {
            Dns.GetHostEntry("www.something.com");
            return true;
        }
        catch (Exception)
        {
            return false;
        }

但这并不适合我。如果系统未连接到互联网,则启动应用程序需要两分钟以上(因为超时)。 想知道是否可以使用WMI命令吗?

3 个答案:

答案 0 :(得分:2)

我使用此类检查Internet连接 如果用户使用Dsl调制解调器连接,则代码无法识别Internet连接

NetworkInterface.GetIsNetworkAvailable()

但是这个类可以解决这个问题,

class InternetConnectionChecker
{
    private bool _connectingFlag = false;
    private Thread _th;

    #region Ping Google To Test Connect Or Disconnect
    private string Ping()
    {
        try
        {
            const string remoteMachineNameOrIP = "173.194.78.104";
            var ping = new Ping();
            var reply = ping.Send(remoteMachineNameOrIP, 5);
            var sb = new StringBuilder();
            sb.Append(reply.Status.ToString());
            return sb.ToString();
        }
        catch (Exception ex)
        {
            return ex.Message;
        }
    }
    #endregion

    #region Connecting Cheker Thread
    private void ConCheck()
    {
        var status = Ping();
        _connectingFlag = status == "Success" || status == "TimedOut";
    }

    public bool ConnectingCheker()
    {
        _th = new Thread(ConCheck);
        _th.Start();
        return _connectingFlag;
    }
    #endregion
}

For Use //不要忘记创建全局实例InternetConnectionChecker

    InternetConnectionChecker _connectionChecker = new     InternetConnectionChecker();

    private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
    {           
        btn1.Content = _connectionChecker.ConnectingCheker();
    }

答案 1 :(得分:0)

我不了解WMI,但有一些.NET Framework类可以帮助System.Net.NetworkInformation命名空间。特别是,NetworkInterface.GetIsNetworkAvailable()可以告诉您网络连接(不一定是因特网)是否可用。在同一名称空间中,Ping类有几种方法用于发送异步和/或具有超时参数的ping请求。

答案 2 :(得分:0)

我使用wininet.dll来解决我的问题,它就像一个魅力。

Please reference this link for its usage.

谢谢你们的时间。