Остановите службу Windows, которая зависит от другой службы, через пакетный файл - PullRequest
6 голосов
/ 02 ноября 2011

Все,

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

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

Например, Service1 зависит от Service2, который настроен в настройках Service в консоли Services.Я запускаю сценарий на моем ПК с Windows 7, а на сервере работает Windows Server 2003.

В созданном мною пакетном файле noddy содержатся следующие строки:

sc \\SERVER stop "Service1"
sc \\SERVER stop "Service2"

Вывод командыКонсоль:

D:\Test>sc \\SERVER stop "Service2"
[SC] ControlService FAILED 1051:

A stop control has been sent to a service that other running services are dependent on.

Служба Service2 не остановится.Service1 останавливается нормально.

Есть идеи?

Спасибо,

Andez

Ответы [ 4 ]

10 голосов
/ 21 февраля 2015

Команда «net stop» имеет параметр, который не комментируется. Этот параметр равен / yes и автоматически останавливает все зависимые службы

Чтобы остановить службу с зависимостями или без них, просто наберите

net stop spooler /yes
2 голосов
/ 04 ноября 2011

Вы можете проверить, какие зависимости у службы, запустив sc qc <service>

И для того, чтобы запрограммировать это и получить зависимости, вы можете поместить его в цикл for

Пример:

@echo off
setlocal enabledelayedexpansion
set service=winmgmt
set server=server

for /f "Tokens=2 Delims=:" %%i in ('sc \\%server% qc %service% ^| find /i "DEPENDENCIES"') do (
    set depservice=%%i
    rem removes spaces
    set depservice=!depservice: =!
    sc \\%server% stop "!depservice!"

    rem extra: accumulate all dependencies to one variable
    set alldeps=!alldeps!, !depservice!
    rem remove first ", " in variable
    set alldeps=!alldeps=~2!

)
sc \\%server% stop "%service%" && echo Both %service% and !alldeps! were stopped || echo Something went wrong stopping %service%
exit /b

Вышеуказанное будет работать, только если у службы, которую вы хотите остановить, есть только одна зависимость.

1 голос
/ 03 сентября 2014

Для тех, кто испытывает подобные проблемы:

Важно помнить, что команда SC асинхронная . Следующее может помочь:

Остановить пакетный файл до полной остановки службы?

1 голос
/ 03 апреля 2013

Пакетный файл Niklas у меня не работает.

Похоже, что в Windows Server 2008 R2 команда qc показывает службы, от которых зависит эта служба.Они не имеют значения на данном этапе, вы можете остановить службу, не вызывая волнение в их жизни.

То, что вы на самом деле хотите, это службы, которые зависят от убиваемой службы.Вы получаете их с помощью команды EnumDepend в sc.exe.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...