set bit=64
IF NOT DEFINED PROGRAMFILES(X86) (
set "PROGRAMFILES(X86)=%PROGRAMFILES%"
set bit=32
)
REM Example 1: REG IMPORT Install%bit%.reg (all compatibility)
REM Example 2: CD %PROGRAMFILES(X86)% (all compatibility)
Следующее определит, подключены ли Вы к сети, однако, который не обязательно означает, что Вы подключены к Интернету:
NetworkInterface.GetIsNetworkAvailable()
Вот перевод C# кода Steve, который, кажется, довольно хорош:
private static int ERROR_SUCCESS = 0;
public static bool IsInternetConnected() {
long dwConnectionFlags = 0;
if (!InternetGetConnectedState(dwConnectionFlags, 0))
return false;
if(InternetAttemptConnect(0) != ERROR_SUCCESS)
return false;
return true;
}
[DllImport("wininet.dll", SetLastError=true)]
public static extern int InternetAttemptConnect(uint res);
[DllImport("wininet.dll", SetLastError=true)]
public static extern bool InternetGetConnectedState(out int flags,int reserved);
Я не c# разработчик, но в C++ можно использовать API Win32 (конкретно из Wininet.dll) как это:
bool IsInternetConnected( void )
{
DWORD dwConnectionFlags = 0;
if( !InternetGetConnectedState( &dwConnectionFlags, 0 ) )
return false;
if( InternetAttemptConnect( 0 ) != ERROR_SUCCESS )
return false;
return true;
}
я предполагаю, что в это тривиально превращаются c#
ответ sbeskur имеет ошибку в переводе InternetGetConnectedState. Параметрами является оба DWORD's (сначала, каждый - LPDWORD). Оба из них переводят в интервал в C# (технически, uint, но интервал будет работать на большинство сценариев).
Корректный перевод ниже.
[DllImport("wininet.dll", SetLastError=true)]
public static extern bool InternetGetConnectedState(out int flags,int reserved);
Состояние InternetGetConnected является шагом один в установлении этого, Вы подключены к сети. Чтобы определить, есть ли у Вас интернет-соединение, одна техника должна использовать API IPHelper для отправки (протокол определения адресов) ARP запроса на некоторый сервер в Интернете.
Я нашел этот код в другом месте, но действительно хотят знать, существует ли лучший путь.
HttpWebRequest req;
HttpWebResponse resp;
try
{
req = (HttpWebRequest)WebRequest.Create("http://www.google.com");
resp = (HttpWebResponse)req.GetResponse();
if(resp.StatusCode.ToString().Equals("OK"))
{
Console.WriteLine("its connected.");
}
else
{
Console.WriteLine("its not connected.");
}
}
catch(Exception exc)
{
Console.WriteLine("its not connected.");
}
мне нравится идея способности контролировать, если соединение потеряно через событие NetworkChange, брошенное NetworkInterface. Мое приложение для использования неопытными пользователями на ноутбуках, где интернет-соединение ошибочно (часто в австралийской Необжитой местности).
http://www.csharphelp.com/archives3/archive499.html
кроме того, прокрутите мимо обменных экспертами ссылок в: http://www.csharpfriends.com/Forums/ShowPost.aspx?PostID=13045 , и Вы будете видеть некоторые предложения.
кроме того, если Вы - игра для Моего пространства имен от VB.Net (который можно связать с, btw), Мой. Компьютер. Сеть. IsAvailable является простым решением.
Предположение при интернет-соединении было бы доступностью сети, в NetworkInterface.GetIsNetworkAvailable()
. События на NetworkChange
могут сказать Вам, когда это изменяется. Оба класса находятся в System.Net.NetworkInformation
пространство имен.
, Конечно, Вы не будете знать, действительно доступен ли Интернет, пока Вы не пытаетесь соединиться с чем-то.
SynchronizationContext
, который имеет функциональную разновидность.
– JaredPar
19 February 2010 в 00:28
Проверьте с помощью ping-запросов google.com (или список известных хостов) или попытайтесь на самом деле выполнить одну из функций (в структурном смысле), для которого Ваше приложение требует интернет-соединения. Нет никакого способа ни в какой операционной системе, действительно определить, функционально ли интернет-соединение без на самом деле попытка для передачи, в противоположность представлению операционной системы о том, что составляет "доступный".