AlSar163
18-09-2014, 14:25
Здравствуйте, уважаемые участники форума OSzone.net!
Передо мной встала такая задача: создать способ автоматического запуска VPN-соединения
для подключения к интернету после включения ПК, который бы удовлетворял следующим критериям:
1) был бы универсален для WinXP x86 и Win7 x64;
2) срабатывал бы сразу при запуске ОС, еще до входа в систему, стабильно и гарантированно в 100% случаев;
3) не выводил бы никаких окон, не вылазил бы в трее и вообще никак бы себя не проявлял;
4) был бы максимально изящным решением и настраивался после установки ОС буквально в несколько кликов.
Изучив много источников в интернете по этому вопросу, я конечно же отмел примитивное
помещение ярлыков в автозагрузку, не удовлетворяющее критерию №2, работу с планировщиком
задач, не подходящую по критерию №4, вызов rasdial при помощи bat-файлов, не устраивающий
по критерию №3 и остановился на решении данного вопроса при помощи создания твика реестра.
Для того, чтобы обеспечить критерий №3, я худо-бедно ознакомился с VBS-скриптами,
и создал скрипт обращения к rasdial, наиболее простой по виду, даже не знаю, можно ли еще что-то упростить.
Содержание скрипта PROVIDER.vbs следующее (предполагая подключение PROVIDER по логину login и паролю pass):
CreateObject("WScript.Shell").Run "rasdial PROVIDER login pass", 0, false
Скрипт успешно заработал, и я перешел к процессу автоматизации его исполнения. Для этой цели я сперва
разместил PROVIDER.vbs в папке system32, а затем создал твик реестра PROVIDER.reg такого содержания:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
"PROVIDER"="PROVIDER.vbs"
И на данном этапе я и столкнулся с проблемами. VPN-соединение подключается, но через раз.
Я пробовал обращаться к VBS-скрипту по разному, напрямую и через wscript, такими способами:
"PROVIDER"="PROVIDER.vbs"
"PROVIDER"="C:\\WINDOWS\\System32\\PROVIDER.vbs"
"PROVIDER"="wscript PROVIDER.vbs"
"PROVIDER"="wscript.exe PROVIDER.vbs"
"PROVIDER"="C:\\WINDOWS\\System32\\wscript.exe PROVIDER.vbs"
"PROVIDER"="C:\\WINDOWS\\System32\\wscript.exe C:\\WINDOWS\\System32\\PROVIDER.vbs"
Но никакой из этих способов не приводил к гарантированной работе. Примерно в 50% случаев
соединение устанавливалось почти сразу, а другая половина запусков ОС была безуспешна.
Интуиция подсказывает, что решение срабатывает тогда, когда уже успела проинициализироваться
локальная сеть, и надо как-то связать этот процесс с запуском скрипта.
Тогда я решил попробовать пойти путем создания системной службы, написав такой файл PROVIDER.bat:
sc create PROVIDER start= auto binPath= "rasdial PROVIDER login pass" DisplayName= "PROVIDER" depend= lanmanworkstation obj= "NT AUTHORITY\LocalService"
Однако и в этот раз - фиаско. Хотя служба успешно создается, и есть зависимость от "Рабочей станции",
но в отличие от 50%-ной работы ссылки в реестре не работает вообще.
Журнал событий Windows выдает последовательно следующую пару ошибок:
№1:
Превышение времени ожидания (30000 мс) при ожидании подключения службы "PROVIDER".
№2:
Сбой при запуске службы "PROVIDER" из-за ошибки
Служба не ответила на запрос своевременно.
Дальнейшие поиски по данному вопросу ни к чему не привели. Предлагался только кривой вариант в виде создания
задержки bat-файлом, минуту пингуя несуществующий локальный IP-адрес, но это же полная чушь...
Обращаюсь к вам, уважаемые форумчане.
Какова ошибка в моих действиях?
Правильно ли предположение о том, что скрипт не работает из-за отсутствия корреляции с lanmanworkstation?
Что же мне предпринять, как создать рабочую службу или хотя бы правильный твик реестра?
Заранее спасибо за внимание.
С уважением, Александр.
P.S. В данный момент тестирую на Win7 Ultimate SP1 x64.
UPD
Я продолжаю экспериментировать, но безуспешно.
По совету товарища попробовал переписать PROVIDER.reg с HKLM на HKCU, вроде бы ветка считывается попозже.
Но так же, как и в случае с HKLM, запускается все равно через раз.
Затем я попробовал создать службу с указанием не rasdial, a скрипта:
binPath= "wscript PROVIDER.vbs"
Все продолжилось с теми же ошибками. Добавление в зависимости lanmanserver тоже не привело к успеху.
Я теряюсь в догадках, что еще можно сделать в этом положении...
Передо мной встала такая задача: создать способ автоматического запуска VPN-соединения
для подключения к интернету после включения ПК, который бы удовлетворял следующим критериям:
1) был бы универсален для WinXP x86 и Win7 x64;
2) срабатывал бы сразу при запуске ОС, еще до входа в систему, стабильно и гарантированно в 100% случаев;
3) не выводил бы никаких окон, не вылазил бы в трее и вообще никак бы себя не проявлял;
4) был бы максимально изящным решением и настраивался после установки ОС буквально в несколько кликов.
Изучив много источников в интернете по этому вопросу, я конечно же отмел примитивное
помещение ярлыков в автозагрузку, не удовлетворяющее критерию №2, работу с планировщиком
задач, не подходящую по критерию №4, вызов rasdial при помощи bat-файлов, не устраивающий
по критерию №3 и остановился на решении данного вопроса при помощи создания твика реестра.
Для того, чтобы обеспечить критерий №3, я худо-бедно ознакомился с VBS-скриптами,
и создал скрипт обращения к rasdial, наиболее простой по виду, даже не знаю, можно ли еще что-то упростить.
Содержание скрипта PROVIDER.vbs следующее (предполагая подключение PROVIDER по логину login и паролю pass):
CreateObject("WScript.Shell").Run "rasdial PROVIDER login pass", 0, false
Скрипт успешно заработал, и я перешел к процессу автоматизации его исполнения. Для этой цели я сперва
разместил PROVIDER.vbs в папке system32, а затем создал твик реестра PROVIDER.reg такого содержания:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
"PROVIDER"="PROVIDER.vbs"
И на данном этапе я и столкнулся с проблемами. VPN-соединение подключается, но через раз.
Я пробовал обращаться к VBS-скрипту по разному, напрямую и через wscript, такими способами:
"PROVIDER"="PROVIDER.vbs"
"PROVIDER"="C:\\WINDOWS\\System32\\PROVIDER.vbs"
"PROVIDER"="wscript PROVIDER.vbs"
"PROVIDER"="wscript.exe PROVIDER.vbs"
"PROVIDER"="C:\\WINDOWS\\System32\\wscript.exe PROVIDER.vbs"
"PROVIDER"="C:\\WINDOWS\\System32\\wscript.exe C:\\WINDOWS\\System32\\PROVIDER.vbs"
Но никакой из этих способов не приводил к гарантированной работе. Примерно в 50% случаев
соединение устанавливалось почти сразу, а другая половина запусков ОС была безуспешна.
Интуиция подсказывает, что решение срабатывает тогда, когда уже успела проинициализироваться
локальная сеть, и надо как-то связать этот процесс с запуском скрипта.
Тогда я решил попробовать пойти путем создания системной службы, написав такой файл PROVIDER.bat:
sc create PROVIDER start= auto binPath= "rasdial PROVIDER login pass" DisplayName= "PROVIDER" depend= lanmanworkstation obj= "NT AUTHORITY\LocalService"
Однако и в этот раз - фиаско. Хотя служба успешно создается, и есть зависимость от "Рабочей станции",
но в отличие от 50%-ной работы ссылки в реестре не работает вообще.
Журнал событий Windows выдает последовательно следующую пару ошибок:
№1:
Превышение времени ожидания (30000 мс) при ожидании подключения службы "PROVIDER".
№2:
Сбой при запуске службы "PROVIDER" из-за ошибки
Служба не ответила на запрос своевременно.
Дальнейшие поиски по данному вопросу ни к чему не привели. Предлагался только кривой вариант в виде создания
задержки bat-файлом, минуту пингуя несуществующий локальный IP-адрес, но это же полная чушь...
Обращаюсь к вам, уважаемые форумчане.
Какова ошибка в моих действиях?
Правильно ли предположение о том, что скрипт не работает из-за отсутствия корреляции с lanmanworkstation?
Что же мне предпринять, как создать рабочую службу или хотя бы правильный твик реестра?
Заранее спасибо за внимание.
С уважением, Александр.
P.S. В данный момент тестирую на Win7 Ultimate SP1 x64.
UPD
Я продолжаю экспериментировать, но безуспешно.
По совету товарища попробовал переписать PROVIDER.reg с HKLM на HKCU, вроде бы ветка считывается попозже.
Но так же, как и в случае с HKLM, запускается все равно через раз.
Затем я попробовал создать службу с указанием не rasdial, a скрипта:
binPath= "wscript PROVIDER.vbs"
Все продолжилось с теми же ошибками. Добавление в зависимости lanmanserver тоже не привело к успеху.
Я теряюсь в догадках, что еще можно сделать в этом положении...