Ах, sc.exe — кто бы мог подумать, что в мире Windows прячется такой маленький герой с большой буквы «С»! Service Control, или просто «служебный командир», живёт себе тихо в папочке C:\Windows\System32 и с тех пор, как NT 4.0 вышел на сцену, верно служит системным администраторам и скриптописателям.
Он не командует службами напрямую — это работа настоящего генерала под названием Service Control Manager (SCM). А sc.exe — всего лишь посредник между вами и этим суровым боссом, передающий ваши приказы через RPC-звонок. Представьте: вы сидите дома в пижаме, а sc.exe уже посылает сигналы на удалённый сервер, словно шпион на секретной миссии.
Главное — иметь права администратора и открытый порт 135; без этого даже самый ловкий агент бессилен.
Но вот где начинается веселье! Многие забывают, что sc.exe — не робот-парсер с искусственным интеллектом. Он просто отдаёт вам сырые данные от SCM, а формат вывода зависит от локали вашей системы.
Попытка распарсить этот вывод через findstr напоминает попытку читать газету в темноте: вроде буквы есть, но смысл ускользает. Здесь лучше взять на вооружение PowerShell или WMI-запросы — они как фонарик для вашего скрипта.
А теперь внимание: самая распространённая ошибка при работе со sc.exe связана с пробелом после знака равенства. Это как поставить запятую не там, где надо — и весь смысл меняется!
Правильно писать так: sc config Spooler start= auto. А если написать start=auto без пробела?
Система выдаст ошибку синтаксиса и посмотрит на вас так же недоверчиво, как бабушка на ваш новый татуаж бровей. Почему так?
Потому что парсинг аргументов в Win32 API остался неизменным со времён NT 4.0 — видимо, Microsoft решила сохранить традиции вместе с багами.
Ещё одна хитрость — кавычки в параметре binPath. Если путь к исполняемому файлу содержит пробелы (а кто их не любит?), то весь путь нужно обернуть в кавычки, но сам параметр остаётся без них: binPath= «C:\Program Files\MyApp\agent.exe». А если внутри пути есть ещё кавычки?
Тогда их нужно экранировать обратным слешем, словно вы прячетесь от службы безопасности IT-отдела: binPath= «cmd.exe /c \»C:\scripts\start.bat\»». Запомните простое правило жизни админа: пробел после равенства обязателен, кавычки вокруг значения нужны, но не вокруг параметра!
Команда sc query — это ваш глаз на состояние службы прямо сейчас. Например, запросите статус диспетчера очереди печати командой sc query Spooler и получите ответ о том, работает ли он или взял тайм-аут на кофе (RUNNING или STOPPED).
Для тех же любителей всё видеть сразу есть команда sc query state= all — она выдаст полный список всех служб. Чтобы быстро найти нужное среди сотни строк вывода можно использовать findstr — своего рода цифровой детектив.
Но будьте осторожны!
Многие путают команды query и qc (query config). Первая показывает текущее состояние службы (как она себя чувствует прямо сейчас), а вторая раскрывает её конфигурацию из реестра (что прописано у неё в паспорте). При расследовании инцидентов обе команды нужны как два бокала шампанского на празднике.
Запускать и останавливать службы проще простого: sc start Spooler и sc stop Spooler делают своё дело быстрее чем вы скажете «Ctrl+Alt+Del».
Но помните про стандартные ошибки! Например, код 1053 означает таймаут — служба слишком долго думает над запуском и SCM теряет терпение спустя 30 секунд; код 1060 говорит о том, что служба с таким именем вообще не существует — возможно вы ошиблись в написании имени или служба решила уйти в отпуск.
sc.exe — незаметный, но незаменимый посредник между администратором и службой Windows, требующий аккуратности в синтаксисе и правильных инструментов для обработки вывода.
sc.exe — незаметный, но незаменимый посредник в управлении службами Windows, требующий точности в синтаксисе и правильных инструментов для работы с выводом.