"net start service" и "sc start". В чем разница?

"net start service" и "sc start". В чем разница?

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

  1. служба net start "какая-то служба"
  2. sc начать "какую-то службу"

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

решение1

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

  • 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

решение2

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

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

...

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

...

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

решение3

Если это и ценно, я обнаружил, что sc start/stop более надежен, чем net start/stop. Иногда net start/stop приводил к тому, что служба застревала в состоянии Starting/Stopping, тогда как с sc start/stop у меня такого еще не случалось. Симптом net start/stop чаще возникает, если служба была завершена (через taskkill), например, при попытке запустить службу с помощью net start после taskkill.

решение4

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

Служба ServiceName запускается..........

Не удалось запустить службу ServiceName.

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

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

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

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

Связанный контент