Graeme Cooper Ответов: 2

Кто-нибудь знает, почему я не могу заставить работать свой зацикленный пакетный файл?


Я создал пакетный файл, который изменяет Тип запуска службы на автоматический (отложенный запуск), и теперь прикрепил скрипт, который проверяет, что служба запущена, а если и не запускает ее, то при тестировании они, похоже, вообще не работают.

источник перезапуска службы часть моего скрипта: windows - Как проверить, работает ли служба через пакетный файл, и запустить ее, если она не работает? - переполнение стека[^]

Мой сценарий выглядит следующим образом:
@ECHO OFF
sc \\127.0.0.1\ config "<Service Here>" start= delayed-auto
SET SvcName="<Service Here>"
:A
rem monitering of the service
sc queryex "%SvcName%" | FIND "STATE" | FIND /v "RUNNING" > NUL && (
    echo %SvcName% is not running 
    echo start %SvcName%

    net start "%SvcName%" > NUL || (
        echo "%SvcName%" wont start 
	echo %date% %time% : %SvcName% is not running >> log.txt
	GOTO:B
    )
    echo "%SvcName%" is started
    GOTO:B
) || (
    echo "%SvcName%" is running
    echo %date% %time% : %SvcName% is running >> log.txt
    :B
    timeout /t 5
    rem this is the timer which sets how frequently the service is checked 1800 for an hour
    GOTO :A
)


Что я уже пробовал:

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

Я просто не понимаю, почему они работают по отдельности, а не вместе.(Кто-нибудь знает, как это решить).

Graeme Cooper

Я действительно думаю, что это может быть проблема администратора, но я не уверен.

Richard MacCutchan

Вы пробовали запустить его под правами администратора? Какие еще сценарии вы упоминаете? Работают ли эти команды, когда вы запускаете их непосредственно из командной строки?

Graeme Cooper

Чтобы упростить все, что я сказал до этого момента. Основная проблема заключается в том, что после изменения типа запуска сервисов скрипт отказывается проходить цикл и проверять состояние сервисов без помощи пользователя.

Graeme Cooper

Комбинация этих двух сценариев показана выше - "мой сценарий выглядит следующим образом"

Graeme Cooper

Я протестировал обе части сценария и только сегодня обнаружил, что они не работают последовательно в одном пакетном файле.

2 Ответов

Рейтинг:
2

RickZeeland

Команда DOS timeout часто проблематична, я бы посоветовал использовать сценарий PowerShell, это также позволяет дождаться завершения процесса.

# Wait for all processes starting with Unins to finish
# Time out after 1 minute
Write-Host "Waiting ..."
wait-process -name Unins* -Timeout 60
Read-Host -Prompt "Done, press Enter to exit"


Рейтинг:
2

Graeme Cooper

Удалите кавычки в начале страницы. Установить SvcName это часть сценария.
Миссия выполнена.