|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Закрытие после выполнения и проверка если запущен |
|
CMD/BAT - Закрытие после выполнения и проверка если запущен
|
Новый участник Сообщения: 11 |
Доброго времени суток. Столкнулся с такой проблемой:
Имеется: 6 компьютеров с Oculus Rift с клиентской игрой, и 1 компьютер серверный . Требуется: При запуске 6 компьютеров игровых, надо что б автоматически запускалась программа для работы Oculus Rift (в настройке прграммы этой ф-ции нет), и клиент игры. Мониторов у компьютеров нет, да и не нужны они, но каждый раз при запуске вручную запускать довольно надоедливо, да и в случае неполадок, просто перезагрузить компьютер - было бы идеальным решением. Что уже сделано: Самое интересное с чем я столкнулся, что Oculus не хотел запускаться обычными способами в автозапуске, если его ярлык поместить в автозагрузку, пробовал все варианты что знал сам и что нашел в интернете, реестр там, в папку в пуске автозагрузки, в общем тщетно. И только потом подумал, что можно сделать скрипт в .bat Файле , на запуск этих программ и уже bat файл встваить в автозагрузку, все заработало, только что требует каждый раз подтверждение администратора, просто нажать кнопку "ОК", но в этом теряется весь смысл, если для запуска надо опять по каждому компу проходить. В итоге вычитал где-то про планировщик задач, добавил в него выполнение бэтки, и поставил максимальные права, и выполнение этой задачи уже добавил в автозагрузку. Радости моей не было предела, но единственное что иногда бывало что прграмма для очков Oculus не запускалась, не знаю почему, может не успевала , но если ее открыть еще раз вручную то все ок. В итоге решил так что добавил ожидание перед началом выполнение скрипта 10 секунд, что б комп успел сам загрузиться, потом выполнял запуск программы и игрового клиента, и после запуска добавил проверку, если этот процесс действительно появился в диспетчере задач, если ок, тогда ничего, иначе запусти ее еще раз. И всё стало супер, единственное что , после добавления этой проверки перестало закрываться само окно bat файла, как будто бы недоконца выполнился скрипт и он чего-то ждет, хотя обе программы уже запустились, но стоит закрыть вручную это bat окно , как программа Oculus закрывается тоже. Собственно вопрос: Как сделать так что бы оно закрывалось после открытия обеих программ само (что в принципе оно и должно делать), просто уверен что прблема в написанном скрипте. Или как сделать так что б если его закрываешь, не закрывалась программа которую она открыла. OculusClient.exe это программа для очков Cosmos_Launcher.exe это сам клиент игры. На скриншоте уже обе прграммы открыты, но окно не пропадает, и если его закрыть, то закроется сам Oculus. Сам скрипт здесь: @echo off ping -n 10 127.0.0.1 > nul //Ожидание 10 секунд, что б дать запуститься системе cd "C:\Program Files\Oculus\Support\oculus-client" start OculusClient.exe //Запуск окулуса ping -n 5 127.0.0.1 > nul //Подождать пока запустится SetLocal EnableExtensions //Проверка если запустился, если нет, то попрбовать снова Set ProcessName=OculusClient.exe TaskList /FI "ImageName EQ %ProcessName%" | Find /I "%ProcessName%" If %ErrorLevel% NEQ 0 Start C:\Program Files\Oculus\Support\oculus-client\%ProcessName% cd "C:\COSMOS\Player" //Тоже самое только с игровым клиентом start COSMOS_Launcher.exe SetLocal EnableExtensions Set ProcessName=COSMOS_Launcher.exe TaskList /FI "ImageName EQ %ProcessName%" | Find /I "%ProcessName%" If %ErrorLevel% NEQ 0 Start C:\COSMOS\Player\%ProcessName% И вопрос на будущее, возможно ли как-то в реальном времени проверять, если вдруг игровой клиент не запущен дважды, или запретить каким-то образом его запуск дважды. Спасибо большое заранее за ваши ответы. Мой первый пост, до этого был только читателем, очень надеюсь на вашу помощь ;-) |
|
Отправлено: 08:36, 12-08-2016 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать |
Отправлено: 09:42, 12-08-2016 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Даже усложним немного, но для надежности:
кстати каким триггером в шедуллере запускается, не при запуске-ли системы? Надо при входе пользователя в систему поставить, тогда весь софт уже будет подгружен и задержки будут не нужны, да при этом коде они и так не нужны. |
Отправлено: 10:20, 12-08-2016 | #3 |
Новый участник Сообщения: 11
|
Профиль | Отправить PM | Цитировать Цитата alpap:
А еще вопрос, это для OculusClient , а для другого файла, сделать тоже самое только до exit? |
|
Отправлено: 10:24, 12-08-2016 | #4 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать По идее так сработает:
@echo off set "pr1=C:\Program Files\Oculus\Support\oculus-client\OculusClient.exe" set "pr2=C:\COSMOS\Player\COSMOS_Launcher.exe" for %%a in ("%pr1%","%pr2%") do call :pr "%%~dpa" "%%~nxa" exit :pr cd /d "%~1" cmd/c for /l %%a in () do @tasklist /fi "imagename eq %~2"^|find/i "%~2" ^&^& exit/b ^|^| (start "" "%~2"^& exit/b)^& ^>nul timeout /t 1 /nobreak exit/b Цитата snipersu28:
|
||
Отправлено: 10:42, 12-08-2016 | #5 |
Новый участник Сообщения: 11
|
Профиль | Отправить PM | Цитировать alpap,
alpap, Вроде такую комманду я использовал для создания ярлыка Это нормально? Что-то я сейчас попробовал все ок работает, перегрузил машину, и все больше доступа туда не имею :D Но в любом случае думаю что все ок, наверное что то с удаленным доступом случилось. Мне бы было интересно не просто скопировать комманды , а разобраться что конкретно она делает, был бы очень благодарен за объяснение. @echo off set "pr1=C:\Program Files\Oculus\Support\oculus-client\OculusClient.exe" это создали переменную, в которой запомнили путь set "pr2=C:\COSMOS\Player\COSMOS_Launcher.exe" for %%a in ("%pr1%","%pr2%") do call :pr "%%~dpa" "%%~nxa" это фор цикл где непонятно сколько раз, берутся переменные , и делается скачсок на :pr с каким-то параметрами, что за они? exit :pr cd /d "%~1" здесь в зависимости от переменной открывается разная папка cmd/c for /l %%a in () do @tasklist /fi "imagename eq %~2"^|find/i "%~2" ^&^& exit/b ^|^| (start "" "%~2"^& exit/b)^& ^>nul timeout /t 1 /nobreak тут несовсем понятно, но тоже фор цикл проходит по диспетчеру задач, в поиске процесса, а вот дальше бы было интересно подробнее что именно все значит exit/b |
Отправлено: 05:54, 13-08-2016 | #6 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать snipersu28,
Все равно без знания азов и не почитав о команде в справке мало что поймете: @echo off set "pr1=C:\Program Files\Oculus\Support\oculus-client\OculusClient.exe" &: Задаем путь к файлу в переменную set "pr2=C:\COSMOS\Player\COSMOS_Launcher.exe" &: Задаем путь к файлу в переменную for %%a in ("%pr1%","%pr2%") do call :pr "%%~dpa" "%%~nxa" &: Перебираем в цикле заданные пути и вытаскиваем в переменную %%~dpa путь к папке, а в переменную %%~nxa имя и расширение файла и передаем эти переменные в подпрограмму с помощью параметров exit :pr cd /d "%~1" &: Переходим в папку, указанную первым параметром rem Тут, если интересно, сначала бесконечный счет, проверка, есть ли процесс и выход, если есть, иначе запуск его и выход, чтобы не перегружать процессор, проверка раз в секунду timeout /t 1 /nobreak cmd/c for /l %%a in () do @tasklist /fi "imagename eq %~2"^|find/i "%~2" ^&^& exit/b ^|^| (start "" "%~2"^& exit/b)^& ^>nul timeout /t 1 /nobreak exit/b |
Отправлено: 15:43, 13-08-2016 | #7 |
Новый участник Сообщения: 11
|
Профиль | Отправить PM | Цитировать Цитата alpap:
![]() ![]() |
|
Отправлено: 18:46, 13-08-2016 | #8 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Удаление пераметра реестра если bat файл запущен в Безопасном режиме | Sfero_ID | Скриптовые языки администрирования Windows | 6 | 05-06-2013 15:25 | |
VBS/WSH/JS - [решено] Проверка ли запущен процесс | Raf-9600 | Скриптовые языки администрирования Windows | 1 | 26-04-2012 13:15 | |
CMD/BAT - [решено] Проверка запущен ли процесс | Abricosio | Скриптовые языки администрирования Windows | 5 | 22-02-2012 00:17 | |
CMD/BAT - [решено] Проверка в батнике запущен ли клиент. | Timeless Ranger | Скриптовые языки администрирования Windows | 5 | 26-10-2011 09:52 | |
Не работает WinWaitActive если скрипт запущен из Windows sheduler | Kubik | AutoIt | 0 | 11-02-2011 16:28 |
|