65

Службы можно остановить и запустить с помощью двух команд в командной строке.

  1. чистый старт сервис "какой-то сервис"
  2. sc start "некоторый сервис"

в чем разница между этими командами?

4 ответа4

75

В Windows NT обе команды обращаются к одному и тому же диспетчеру служб. Разница в основном в видимой для пользователя части:

  • net старше - со времен MS-DOS и OS/2, по сути.

    sc появился только с Windows NT (не уверен, какая версия).

  • net может только запускать, останавливать и приостанавливать услуги.

    sc имеет более продвинутые элементы управления, может запрашивать состояние, создавать и удалять сервисы, изменять их конфигурацию и безопасность: sc config beep start= demand

  • net работает только локально.

    sc можно использовать по сети: sc \\snow start rpcapd

  • net принимает отображаемые имена: net start "Windows Firewall"

    sc всегда требует имя службы: sc start SharedAccess

75

Ответ Гравити, безусловно, полезен, но я обнаружил принципиальное различие между этими командами, подробно описанное на http://cbfive.com/command-line-service-management-net-v-sc/ . В частности, на этой странице отмечается, что эти две команды различаются по времени: "net" является синхронным, а "sc" - асинхронным.

SC отправляет управление службе, а затем возвращается в командную строку. Обычно это приводит к тому, что SC START возвращает службу в состоянии START_PENDING. NET START будет ожидать, когда служба начинает переходить в полностью запущенное состояние, прежде чем она вернет управление в командной строке.

...

[L] ike SC START, SC STOP не ожидает остановки службы и будет часто возвращать STOP_PENDING для многих операций остановки службы. NET STOP, с другой стороны, будет ожидать остановки службы, прежде чем она вернется в командную строку.

...

NET и SC имеют разные представления о том, что они считают условиями успеха. SC задает вопрос, был ли он успешным: «Успешно ли я отправил управление остановкой в службу?» Если это так, независимо от того, была ли остановлена служба, я удовлетворяю условию успешного завершения. NET задает вопрос: «Служба, которую я пытался остановить, вернула, что она успешно остановилась?» Если это так, то оно удовлетворяет условию. Если это не так, независимо от причины, NET не сможет успешно выполнить условие

3

Я считаю, что sc start/stop более надежен, чем net start/stop. Иногда запуск / остановка сети приводили к зависанию службы в состоянии «Запуск / остановка», тогда как с sc sc start/stop мне это никогда не приходило в голову. Симптом net start/stop чаще всего возникает, если сервис был убит (посредством taskkill), например, попытка запустить сервис с net start после taskkill.

2

Осталось сказать, что если подпрограмма OnStart() службы занимает слишком много времени, NET START отправляет в службу команду остановки и возвращает следующую ошибку:

Сервис ServiceName запускается ........

Служба ServiceName не может быть запущена.

Служба не сообщила об ошибке.

Дополнительную помощь можно получить, набрав NET HELPMSG 3534.

Это происходит, хотя служба была запущена и успешно остановлена!

Я также нашел этот пост здесь, который может быть интересным:служба не может быть запущена

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .