Показать полную графическую версию : [решено] Выполнение следующей команды, после завершения определенного процесса
Нужно сделать скрипт для автоматической установки Oracle 11g. Найден мануал, в котором описано что и за чем делать.
Запустить setup с ключами, запустить .bat из директории, куда установится Oracle(он появится только после установки), и скопировать файл в определенную директорию.
Всё бы ничего. Скрипт простейший на первый взгляд. Простое постепенное выполнение команд.
Однако, после запуска setup.exe, он запускает процесс java.exe, а сам исчезает. Процесс java.exe и занимается установкой программы. НО cmd считает, что после исчезновения из списка процессов процесса setup.exe - программа установилась, и продолжает по списку выполнять команды, т.е. пытается найти .bat и запустить его, естественно его не находит, потому что программа еще только устанавливается.
Подскажите, пожалуйста, как сделать, чтобы вторая команда (запуск .bat) происходила после завершения процесса установки(когда отработает не setup.exe, a java.exe).
Заранее благодарю за любые подсказки и наводки.
SendMessage
12-01-2011, 19:24
Можно так:
start /wait "" jawa.exe
my.bat
По желанию еще проверку добавить можно:
start /wait "" jawa.exe
tasklist | find "jawa.exe" || my.bat
SendMessage, не тот случай, т.к. java.exe запускается не батником
Weterok, отследить активность процесса вкупе со всеми дочерними нетривиальная задача, т.к. это можно реализовать только средствами самой запускающей утилиты, но START и подобные не имеют такой функциональности... однажды приходилось решать подобное в AutoIT - это проще, чем писать свой StartWait.Exe, если есть интерес линк на ветку форума (http://autoit-script.ru/index.php?topic=1283.0)
штатными средствами - ожидание завершения процесса,
но это не панацея, т.к. java.exe может быть запущен и другими программами
start /wait "" setup.exe
:loop
ping -n 1 127.0.0.1 >nul
tasklist|find /i "java.exe">nul&& goto loop
то же, с использованием NirCmd (http://www.nirsoft.net/utils/nircmd.html):
start /wait "" setup.exe
nircmd waitprocess java.exe
amel27,
делается для установки на чистый компьютер, где java.exe других не должно быть. Как вариант на первое время - очень даже. Работает, и это главное. Спасибо огромное за совет и за ссылку! начну копание вглубь этой проблемы с нее.
делается для установки на чистый компьютер »
для паузы через PING должна быть настроена сеть, иначе паузу придется реализовывать другим способом
статья: Пауза в пакетном файле (http://www.oszone.net/6160)
Опять-таки, устанавливаться это счастье будет через WDS естественно по сети, поэтому косяка быть не должно. Я только что проверила - работает. Спасибо еще раз !
Задача такая. Происходит установка программы, по завершении установки программа "Prog" запускается, но как таковое приложение "Установка" ещё висит в памяти, и установка завершается, когда только закроешь окно запустившейся проги "Prog".
Хотелось бы, чтобы окно программы закрывалось автоматом скриптом, но так как по сути процесс "Установка" ещё запущен, когда это окно открывается, скрипт такого рода не срабатывает:START "" /WAIT "Установка"
TASKKILL /F /IM "Prog"
Помогите решить вопрос?
Как-то так:
start "" "setup.exe"
:Repeat
>nul ping.exe -n 2 127.0.0.1
taskkill.exe /f /im "Prog.exe" || goto :Repeat
Задача такая. Происходит установка программы, по завершении установки программа запускается, но как таковое приложение "Установка" ещё висит в памяти, и установка завершается, когда только закроешь окно запустившейся проги "Prog".
Хотелось бы, чтобы окно программы закрывалось автоматом скриптом »
Как-то так:
start "" "setup.exe"
:Repeat
>nul ping.exe -n 2 127.0.0.1
taskkill.exe /f /im "Prog.exe" || goto :Repeat »
Теперь задача такая же, только команда taskkill.exe /f /im "Prog.exe" должна сработать не сразу, а скажем через 5 секунд после запуска процесса "Prog". Подскажите, как реализовать?
а скажем через 5 секунд после запуска процесса "Prog". »
Не менее 5 секунд:
>nul ping.exe -n 6 127.0.0.1
Почему-то данная конструкция не срабатывает вкупе с nircmd.exe, возврата на :Repeat не происходит:
start "" /b "%ProgramFiles%\Opera\opera.exe"
:Repeat
>nul ping.exe -n 2 127.0.0.1
nircmd.exe win close title "Добро пожаловать" || goto :Repeat
exit Есть ли способ подружиться с nircmd.exe или как-то по другому реализовать закрытие окна после запуска программы, именно окна, а не самого приложения?
Почему-то данная конструкция не срабатывает вкупе с nircmd.exe, возврата на :Repeat не происходит »
И не должна. «taskkill.exe» устанавливает код возврата по результатам своей работы. «NirCmd.exe» — нет [замечу, что, в принципе, можно сделать это вручную командой «returnval [Return Value]»; но Вам оно не подойдёт].
Я не видел в Opera окна «Добро пожаловать». Опишите, какую версию Вы использовали.
Просто интересно разобраться, как закрыть окно. В данном случае оно возникает, если в настройках Ореры поставить: При запуске - показывать окно запуска:
http://s42.radikal.ru/i098/1203/a0/21fae9075d22t.jpg (http://radikal.ru/F/s42.radikal.ru/i098/1203/a0/21fae9075d22.jpg.html)
BigBoo, закрытие этого окна вызовет отмену запуска «Opera». Вам именно это надо?
E:\Песочница\0132\Script.ncl:
exec show "~$folder.programfiles$\Opera\opera.exe"
wait 5000
loop 5 1000 win close title "Добро пожаловать"
Вызов:
nircmdc.exe script "E:\Песочница\0132\Script.ncl"
Вопрос такой: Устанавливается программаstart "" /wait "WebcamMax-7.7.2.2.MultiLanguage.Setup.exe" /S Во время установки на Win7 выскакивает окно "Безопасность Windows" с вопросом о продолжении установки. Нажать кнопку "Установить" в окне можно такnircmd.exe win dlgclick "Безопасность Windows" ok Нужен скрипт, который выполнит команду nircmd.exe во время время установки программы и отследит завершение процесса её установки. Чтобы следующие команды выполнились только после установки программы.
megane68
17-11-2015, 09:02
Подскажите плиз.
Использую закрытие процесса перед запуском установки:
:Repeat
>nul ping.exe -n 2 127.0.0.1
taskkill.exe /f /im "engine.exe" || goto :Repeat
Надо, чтобы игнорировалось сообщение "Не удаётся найти процесс", если процесс не запущен.
Или по другому - команда завершения процесса выполнялась, только если он запущен.
:Repeat
>nul ping.exe -n 2 127.0.0.1
2>nul taskkill.exe /f /im "engine.exe" || goto :Repeat
megane68
17-11-2015, 09:33
Georgio, так не выполняется следующая команда запуска установки.
Зависает с открытой ком строкой.
megane68
17-11-2015, 12:37
Спасибо всем!!!
Получилось так:
@echo off
setlocal ENABLEDELAYEDEXPANSION
Set Process=engine
tasklist | Find /i "engine.exe" || (goto Else)
:THEN
:Repeat
>nul ping.exe -n 2 127.0.0.1
taskkill.exe /f /im "engine.exe" || goto :Repeat
:ELSE
start /wait "Uninstall" Uninstall.exe
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.