Как мне дождаться запуска службы / процесса, прежде чем продолжить пакетный скрипт? - PullRequest
2 голосов
/ 09 июня 2010

Я пишу пакетный скрипт Windows для удаления некоторого программного обеспечения. Однако мне нужно подождать после завершения деинсталлятора для перезапуска службы, прежде чем продолжить следующую деинсталляцию.

Я могу заставить скрипт ждать завершения деинсталлятора, используя: -

for /f "usebackq" %%M in ('tasklist /nh /fi "imagename eq %process_1%"') do if not %%M==%ignore_result% goto 1

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

Я открыт для любых предложений.

Ответы [ 3 ]

2 голосов
/ 13 июля 2012

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

FOR /F "usebackq tokens=1,4" %%A IN (`sc query AcquisitionService`) DO (
    IF %%A==STATE SET serviceStatus=%%B
)
0 голосов
/ 27 апреля 2014

Ответчик, предоставленный постером, работает, но использует временный файл. Я нашел способ избежать этого, используя разделитель труб.

Этот код запустит службу, затем подождите, пока она не запустится:

sc start ServiceName
:1
sc query ServiceName>NUL | find "RUNNING">NUL
if errorlevel 1 goto 1
(...)

Перенаправление (> NUL) не является обязательным или, по крайней мере, в моем случае не имеет значения.

0 голосов
/ 11 июня 2010

ОК из комментариев. Я использовал приведенный ниже скрипт для решения проблемы.Я надеялся не использовать промежуточный файл, но когда это необходимо ...

@echo off<br> if exist service.txt del service.txt<br> set process=setup.exe<br> set ignore_result=INFO:<br> :1<br> for /f "usebackq" %%M in ('tasklist /nh /fi "imagename eq %process%"') do if not %%M==%ignore_result% goto 1<br> :2<br> sc query AcquisitionService>service.txt<br> find "RUNNING"<service.txt>nul<br> if errorlevel 1 goto 2<br> :3<br> echo.<br> echo Stuff finished.......

Спасибо за идеи

...