Войти

Показать полную графическую версию : [решено] Выполнение следующей команды, после завершения определенного процесса


Страниц : [1] 2

Weterok
12-01-2011, 16:34
Нужно сделать скрипт для автоматической установки 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

amel27
13-01-2011, 07:07
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

Weterok
13-01-2011, 13:27
amel27,
делается для установки на чистый компьютер, где java.exe других не должно быть. Как вариант на первое время - очень даже. Работает, и это главное. Спасибо огромное за совет и за ссылку! начну копание вглубь этой проблемы с нее.

amel27
13-01-2011, 13:40
делается для установки на чистый компьютер »
для паузы через PING должна быть настроена сеть, иначе паузу придется реализовывать другим способом
статья: Пауза в пакетном файле (http://www.oszone.net/6160)

Weterok
13-01-2011, 13:46
Опять-таки, устанавливаться это счастье будет через WDS естественно по сети, поэтому косяка быть не должно. Я только что проверила - работает. Спасибо еще раз !

BigBoo
24-03-2012, 16:11
Задача такая. Происходит установка программы, по завершении установки программа "Prog" запускается, но как таковое приложение "Установка" ещё висит в памяти, и установка завершается, когда только закроешь окно запустившейся проги "Prog".

Хотелось бы, чтобы окно программы закрывалось автоматом скриптом, но так как по сути процесс "Установка" ещё запущен, когда это окно открывается, скрипт такого рода не срабатывает:START "" /WAIT "Установка"
TASKKILL /F /IM "Prog"
Помогите решить вопрос?

Iska
24-03-2012, 16:25
Как-то так:
start "" "setup.exe"
:Repeat
>nul ping.exe -n 2 127.0.0.1
taskkill.exe /f /im "Prog.exe" || goto :Repeat

BigBoo
24-03-2012, 17:17
Iska, спасибо, работает.

BigBoo
30-03-2012, 14:00
Задача такая. Происходит установка программы, по завершении установки программа запускается, но как таковое приложение "Установка" ещё висит в памяти, и установка завершается, когда только закроешь окно запустившейся проги "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". Подскажите, как реализовать?

Iska
30-03-2012, 15:25
а скажем через 5 секунд после запуска процесса "Prog". »
Не менее 5 секунд:
>nul ping.exe -n 6 127.0.0.1

BigBoo
31-03-2012, 00:58
Почему-то данная конструкция не срабатывает вкупе с 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 или как-то по другому реализовать закрытие окна после запуска программы, именно окна, а не самого приложения?

Iska
31-03-2012, 06:42
Почему-то данная конструкция не срабатывает вкупе с nircmd.exe, возврата на :Repeat не происходит »
И не должна. «taskkill.exe» устанавливает код возврата по результатам своей работы. «NirCmd.exe» — нет [замечу, что, в принципе, можно сделать это вручную командой «returnval [Return Value]»; но Вам оно не подойдёт].

Я не видел в Opera окна «Добро пожаловать». Опишите, какую версию Вы использовали.

BigBoo
31-03-2012, 10:51
Просто интересно разобраться, как закрыть окно. В данном случае оно возникает, если в настройках Ореры поставить: При запуске - показывать окно запуска:
http://s42.radikal.ru/i098/1203/a0/21fae9075d22t.jpg (http://radikal.ru/F/s42.radikal.ru/i098/1203/a0/21fae9075d22.jpg.html)

Iska
31-03-2012, 14:11
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"

BigBoo
08-03-2013, 16:42
Вопрос такой: Устанавливается программа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
Надо, чтобы игнорировалось сообщение "Не удаётся найти процесс", если процесс не запущен.
Или по другому - команда завершения процесса выполнялась, только если он запущен.

Georgio
17-11-2015, 09:19
: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