Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Выполнение следующей команды, после завершения определенного процесса (http://forum.oszone.net/showthread.php?t=196470)

Weterok 12-01-2011 16:34 1587010

Выполнение следующей команды, после завершения определенного процесса
 
Нужно сделать скрипт для автоматической установки 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 1587116

Можно так:
Код:

start /wait "" jawa.exe
my.bat

По желанию еще проверку добавить можно:
Код:

start /wait "" jawa.exe
tasklist | find "jawa.exe" || my.bat


amel27 13-01-2011 07:07 1587442

SendMessage, не тот случай, т.к. java.exe запускается не батником

Weterok, отследить активность процесса вкупе со всеми дочерними нетривиальная задача, т.к. это можно реализовать только средствами самой запускающей утилиты, но START и подобные не имеют такой функциональности... однажды приходилось решать подобное в AutoIT - это проще, чем писать свой StartWait.Exe, если есть интерес линк на ветку форума

штатными средствами - ожидание завершения процесса,
но это не панацея, т.к. java.exe может быть запущен и другими программами
Код:

start /wait "" setup.exe
:loop
ping -n 1 127.0.0.1 >nul
tasklist|find /i "java.exe">nul&& goto loop

то же, с использованием NirCmd:
Код:

start /wait "" setup.exe
nircmd waitprocess java.exe


Weterok 13-01-2011 13:27 1587689

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

amel27 13-01-2011 13:40 1587696

Цитата:

Цитата Weterok
делается для установки на чистый компьютер »

для паузы через PING должна быть настроена сеть, иначе паузу придется реализовывать другим способом
статья: Пауза в пакетном файле

Weterok 13-01-2011 13:46 1587698

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

BigBoo 24-03-2012 16:11 1885827

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

Хотелось бы, чтобы окно программы закрывалось автоматом скриптом, но так как по сути процесс "Установка" ещё запущен, когда это окно открывается, скрипт такого рода не срабатывает:
Код:

START "" /WAIT "Установка"
TASKKILL /F /IM "Prog"

Помогите решить вопрос?

Iska 24-03-2012 16:25 1885831

Как-то так:
Код:

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 1885857

Iska, спасибо, работает.

BigBoo 30-03-2012 14:00 1890011

Цитата:

Цитата BigBoo
Задача такая. Происходит установка программы, по завершении установки программа запускается, но как таковое приложение "Установка" ещё висит в памяти, и установка завершается, когда только закроешь окно запустившейся проги "Prog".
Хотелось бы, чтобы окно программы закрывалось автоматом скриптом »

Цитата:

Цитата Iska
Как-то так:
Код:

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 1890078

Цитата:

Цитата BigBoo
а скажем через 5 секунд после запуска процесса "Prog". »

Не менее 5 секунд:
Код:

>nul ping.exe -n 6 127.0.0.1

BigBoo 31-03-2012 00:58 1890462

Почему-то данная конструкция не срабатывает вкупе с 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 1890504

Цитата:

Цитата BigBoo
Почему-то данная конструкция не срабатывает вкупе с nircmd.exe, возврата на :Repeat не происходит »

И не должна. «taskkill.exe» устанавливает код возврата по результатам своей работы. «NirCmd.exe» — нет [замечу, что, в принципе, можно сделать это вручную командой «returnval [Return Value]»; но Вам оно не подойдёт].

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

BigBoo 31-03-2012 10:51 1890577

Просто интересно разобраться, как закрыть окно. В данном случае оно возникает, если в настройках Ореры поставить: При запуске - показывать окно запуска:

Iska 31-03-2012 14:11 1890680

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 2106866

Вопрос такой: Устанавливается программа
Код:

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 2575620

Подскажите плиз.
Использую закрытие процесса перед запуском установки:
Код:

:Repeat
 >nul ping.exe -n 2 127.0.0.1
 taskkill.exe /f /im "engine.exe" || goto :Repeat

Надо, чтобы игнорировалось сообщение "Не удаётся найти процесс", если процесс не запущен.
Или по другому - команда завершения процесса выполнялась, только если он запущен.

Georgio 17-11-2015 09:19 2575625

Код:

: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 2575630

Georgio, так не выполняется следующая команда запуска установки.
Зависает с открытой ком строкой.

megane68 17-11-2015 12:37 2575688

Спасибо всем!!!
Получилось так:
Код:

@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


megane68 17-11-2015 13:08 2575697

Теперь другой вопрос:
Нужно запустить Uninstall.exe, если этот файл есть в наличии, если нет - выполнить следующую команду.

megane68 18-11-2015 12:18 2576109

Цитата:

@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
Как завершить процесс engine.exe, если он был запущен от администратора?

Iska 18-11-2015 13:04 2576128

Цитата:

Цитата megane68
Как завершить процесс engine.exe, если он был запущен от администратора? »

Иметь для процесса, инициирующего завершение, административные привилегии.

megane68 18-11-2015 13:58 2576146

Iska, понятно.
В общем другими словами - батник нужно запускать с правами админа.
Что же, придётся *.exe делать из батника, раз пошла такая пьянка.
Спасибо!


Время: 03:04.

Время: 03:04.
© OSzone.net 2001-