Службы можно остановить и запустить с помощью двух команд в командной строке.
- чистый старт сервис "какой-то сервис"
- sc start "некоторый сервис"
в чем разница между этими командами?
Службы можно остановить и запустить с помощью двух команд в командной строке.
в чем разница между этими командами?
В 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
Ответ Гравити, безусловно, полезен, но я обнаружил принципиальное различие между этими командами, подробно описанное на 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 не сможет успешно выполнить условие
Я считаю, что sc start/stop более надежен, чем net start/stop. Иногда запуск / остановка сети приводили к зависанию службы в состоянии «Запуск / остановка», тогда как с sc sc start/stop мне это никогда не приходило в голову. Симптом net start/stop чаще всего возникает, если сервис был убит (посредством taskkill), например, попытка запустить сервис с net start после taskkill.
Осталось сказать, что если подпрограмма OnStart() службы занимает слишком много времени, NET START
отправляет в службу команду остановки и возвращает следующую ошибку:
Сервис ServiceName запускается ........
Служба ServiceName не может быть запущена.
Служба не сообщила об ошибке.
Дополнительную помощь можно получить, набрав NET HELPMSG 3534.
Это происходит, хотя служба была запущена и успешно остановлена!
Я также нашел этот пост здесь, который может быть интересным:служба не может быть запущена