2

接続が利用できるときはいつでもアプリケーションをサーバーに接続して (更新を確認するために)、利用できないときは何もしないようにしたいと考えています。ダイヤルアップ接続を使用している人々が、私のプログラムがこれを試みるたびに、ISP にダイヤルするように求めるプロンプトのいずれかを受け取るのではないかと心配しています。今日、ダイヤルアップを使用している人はほとんどいないと思いますが、それでもなお.

私自身は 10 年以上ダイヤルアップを使用していないので、WebRequestオフラインで HTTP リクエスト (たとえば、 を使用) を実行すると、そのような「ダイヤル」プロンプトが表示されるかどうかは正直わかりません。しますか?その場合、そのようなプロンプトを表示せずに更新を確認するにはどうすればよいですか?

4

2 に答える 2

1

これを使用して:

My.Computer.Network.IsAvailable

そして多分これ:

    Dim available As Boolean
    Try
        Dim client As New System.Net.Sockets.TcpClient("google.com", 80)
        available = True
    Catch ex As Exception
        available = False
    End Try

結果が「利用可能」の場合、アップデートが利用可能かどうかを確認できます。

于 2012-12-27T19:19:01.223 に答える
0

WinInet APIは次の関数を実装します。

BOOL InternetGetConnectedState(
  _Out_  LPDWORD lpdwFlags,
  _In_   DWORD dwReserved
);

特定の API 呼び出しの詳細については、こちらを参照してください。


編集: テストに使用できる小さなコード サンプルを提供しました。
内部では、My.Computer.Network.IsAvailableP/Invokesが真/偽のInternetGetConnectedState値を返し、フラグを破棄することに注意してください。WinNt 以降では、ネットワーク インターフェイスを介して列挙し、最初に接続されたインターフェイスに対して true を返します。

using System;

namespace InternetGetConnectedState
{
    [Flags]
    enum InternetConnectionFlags : uint
    {
        // Flags for InternetGetConnectedState and Ex
        Modem = 0x01,
        Lan = 0x02,
        Proxy = 0x04,
        ModemBusy = 0x08,  /* no longer used */
        RasInstalled = 0x10,
        Offline = 0x20,
        Configured = 0x40
    }

    class Program
    {
        [System.Runtime.InteropServices.DllImport("wininet.dll", SetLastError = true)]
        static extern bool InternetGetConnectedState(out InternetConnectionFlags flags, uint dwReserved);

        static void Main(string[] args)
        {
            InternetConnectionFlags flags;
            bool connectedState = InternetGetConnectedState(out flags, 0)

            // TODO:  Check Flags
        }
    }
}

編集 2: ILSpy ダンプをさらに確認した後、NT より前の WindowsでMy.Computer.Network.IsAvailableP/ Invokes を実行します。InternetGetConnectedStateWinNt 以降では、ネットワーク インターフェイスを介して列挙し、最初に接続されたインターフェイスに対して true を返します。だから、どちらか

My.Computer.Network.IsAvailable  'vb.net

また

System.Net.NetworkInformation.GetIsNetworkAvailable(); // C#

実行可能なソリューションです。

おそらく、自動更新を無効にするオプションは、エンド ユーザーの煩わしさを回避するための別の可能な解決策です。

于 2012-12-27T19:26:20.967 に答える