VVolf
28-03-2013, 10:21
Приветствую всех!
Столкнулся с, необъяснимой для меня, проблемой, может кто-нибудь сможет растолковать причину?
Предыстория:
Дома 2 компа, в первый (основной) приходит интернет от провайдера и он раздает его на wi-fi точку доступа и второй комп. На основном стоит Win 8 и на нем наблюдается проблема отсутствия реконнекта VPN при обрыве связи и он не хочет сразу раздавать интернет, пока не перезагрузишь службу "SharedAccess".
Для решения проблемы в начале создал bat-файл в котором выполняются 3 простых действия: подключение VPN и остановка / запуск службы "SharedAccess".
Текст файла:
rasdial VpnName UserName Password
echo net stop SharedAccess && net start SharedAccess
Работает все отлично, VPN подключается и интернет сразу начинает раздаваться. Проблема в том, что его можно засунуть максимум в автозагрузку, что бы при загрузке интернет подключался, либо использовать при обрыве связи (вручную запустить).
Следующим шагом решил создать приложение которое постоянно, с неким промежутком, пингует 8.8.8.8 и, при длительном отсутствии ответа, реконнектит VPN и перезапускает службы, в общем делает то же самое что и bat-файл.
Часть текста, который за это у меня отвечает:
System.Diagnostics.Process.Start("rasdial.exe", "VpnName /d"); // Отключаем VPN, на случай если он просто подвис.
System.Diagnostics.Process.Start("rasdial.exe", "VpnName UserName Password"); // Подключаем VPN
// Создаем отдельный поток в котором будет перезапускаться служба расшаривания интерната
Thread serviceRestart = new Thread(new ThreadStart(delegate
{
ServiceController service = new ServiceController("SharedAccess"); // Инициализируем экземпляр ServiceController и связываем его со службой расшаривания интернет (SharedAccess)
// Пробуем остановить службу
try
{
service.Stop(); // Останавливаем службу
service.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 1, 0)); // Ждем в течении 1 минуты переход службы в остановленное состояние
}
// Если не получилось пишем ошибка в лог файл
catch (Exception ex)
{
System.IO.File.AppendAllText(@"BTReconnect_log.txt", "Остановка службы неудалась, ошибка: " + ex.Message + ". Время: " + DateTime.Now + "\n"); // Пишем текст ошибки в файл
}
finally
{
// Пробуем запустить службу
try
{
service.Start(); // Запускаем службу
service.WaitForStatus(ServiceControllerStatus.Running, new TimeSpan(0, 1, 0)); // Ждем в течении 1 минуты переход службы в запущенное состояние
}
// Если что-то не получилось пишем ошибка в лог файл
catch (Exception ex)
{
System.IO.File.AppendAllText(@"BTReconnect_log.txt", "Запуск службы неудался, ошибка: " + ex.Message + ". Время: " + DateTime.Now + "\n"); // Пишем текст ошибки в файл
}
finally
{
// Если служба работает, пишем в лог состояние после перезапуска VPN соединения и попытки перезапуска службы
if (service.Status == ServiceControllerStatus.Running)
System.IO.File.AppendAllText(@"BTReconnect_log.txt", "Служба запущена. Время: " + DateTime.Now + "\n");
System.IO.File.AppendAllText(@"BTReconnect_log.txt", "===> *************** <===\n\n"); // Дописываем в файл разделить
}
}
}));
serviceRestart.Start(); // Запускаем поток
Суть проблемы в следующем:
Созданное приложение, вроде как, функционирует, т.е. пингует адрес 8.8.8.8 , при разрыве соединения реконнектит интернет и перезапускает службы, но есть большое НО:
Интернет на основном компьютере начинает работать с большими задержками, тот же адрес (8.8.8.8) пингуется через раз и нет раздачи инета на второй комп и точку доступа.
Помогите понять, где косяк в приложении?
P.S. Работающий батник тоже пытался запускать через приложение, результат тот же, сеть работает с перебоями и нет раздачи интернета.
При необходимости могу выложить весь проект.
Столкнулся с, необъяснимой для меня, проблемой, может кто-нибудь сможет растолковать причину?
Предыстория:
Дома 2 компа, в первый (основной) приходит интернет от провайдера и он раздает его на wi-fi точку доступа и второй комп. На основном стоит Win 8 и на нем наблюдается проблема отсутствия реконнекта VPN при обрыве связи и он не хочет сразу раздавать интернет, пока не перезагрузишь службу "SharedAccess".
Для решения проблемы в начале создал bat-файл в котором выполняются 3 простых действия: подключение VPN и остановка / запуск службы "SharedAccess".
Текст файла:
rasdial VpnName UserName Password
echo net stop SharedAccess && net start SharedAccess
Работает все отлично, VPN подключается и интернет сразу начинает раздаваться. Проблема в том, что его можно засунуть максимум в автозагрузку, что бы при загрузке интернет подключался, либо использовать при обрыве связи (вручную запустить).
Следующим шагом решил создать приложение которое постоянно, с неким промежутком, пингует 8.8.8.8 и, при длительном отсутствии ответа, реконнектит VPN и перезапускает службы, в общем делает то же самое что и bat-файл.
Часть текста, который за это у меня отвечает:
System.Diagnostics.Process.Start("rasdial.exe", "VpnName /d"); // Отключаем VPN, на случай если он просто подвис.
System.Diagnostics.Process.Start("rasdial.exe", "VpnName UserName Password"); // Подключаем VPN
// Создаем отдельный поток в котором будет перезапускаться служба расшаривания интерната
Thread serviceRestart = new Thread(new ThreadStart(delegate
{
ServiceController service = new ServiceController("SharedAccess"); // Инициализируем экземпляр ServiceController и связываем его со службой расшаривания интернет (SharedAccess)
// Пробуем остановить службу
try
{
service.Stop(); // Останавливаем службу
service.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 1, 0)); // Ждем в течении 1 минуты переход службы в остановленное состояние
}
// Если не получилось пишем ошибка в лог файл
catch (Exception ex)
{
System.IO.File.AppendAllText(@"BTReconnect_log.txt", "Остановка службы неудалась, ошибка: " + ex.Message + ". Время: " + DateTime.Now + "\n"); // Пишем текст ошибки в файл
}
finally
{
// Пробуем запустить службу
try
{
service.Start(); // Запускаем службу
service.WaitForStatus(ServiceControllerStatus.Running, new TimeSpan(0, 1, 0)); // Ждем в течении 1 минуты переход службы в запущенное состояние
}
// Если что-то не получилось пишем ошибка в лог файл
catch (Exception ex)
{
System.IO.File.AppendAllText(@"BTReconnect_log.txt", "Запуск службы неудался, ошибка: " + ex.Message + ". Время: " + DateTime.Now + "\n"); // Пишем текст ошибки в файл
}
finally
{
// Если служба работает, пишем в лог состояние после перезапуска VPN соединения и попытки перезапуска службы
if (service.Status == ServiceControllerStatus.Running)
System.IO.File.AppendAllText(@"BTReconnect_log.txt", "Служба запущена. Время: " + DateTime.Now + "\n");
System.IO.File.AppendAllText(@"BTReconnect_log.txt", "===> *************** <===\n\n"); // Дописываем в файл разделить
}
}
}));
serviceRestart.Start(); // Запускаем поток
Суть проблемы в следующем:
Созданное приложение, вроде как, функционирует, т.е. пингует адрес 8.8.8.8 , при разрыве соединения реконнектит интернет и перезапускает службы, но есть большое НО:
Интернет на основном компьютере начинает работать с большими задержками, тот же адрес (8.8.8.8) пингуется через раз и нет раздачи инета на второй комп и точку доступа.
Помогите понять, где косяк в приложении?
P.S. Работающий батник тоже пытался запускать через приложение, результат тот же, сеть работает с перебоями и нет раздачи интернета.
При необходимости могу выложить весь проект.