«Net start service» и «sc start». В чем разница?

70

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

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

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

Starx
источник

Ответы:

81

В 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

grawity
источник
82

Ответ Гравити, безусловно, полезен, но я обнаружил принципиальную разницу между этими командами, подробно изложенную на 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 не сможет успешно выполнить условие

Маттиас Андерссон
источник
1
Интересная деталь, эта. Может быть полезно знать для сценариев (переменная% ERRORLEVEL%). Благодарю.
Сопалахо де Арриерес
1
этот ответ очень полезен для меня, так как я испытываю периодические ошибки сценариев, пытаясь очистить каталог службы после его остановки, так как он не был полностью остановлен.
Джон Сант
я хочу использовать "sc config", это тоже асинхронно? Есть ли способ для пакетного файла ждать, пока задача на самом деле завершена?
Питер
3

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

сойка
источник
2

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

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

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

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

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

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

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

Lumo
источник