Команда SC – управление службами.
Команда SC используется для конфигурирования, опроса состояния, остановки, запуска, удаления и добавления системных служб в командной строке Windows. Большая часть подкоманд команды SC применима так же по отношению к драйверам. При наличии соответствующих прав, команда SC может применяться для управления службами как на локальной, так и на удаленной системе.
Формат командной строки:
sc сервер [команда] [имя службы] параметр1 параметр2 .
При запуске SC.EXE без параметров, отображается подсказка по использованию команды.
сервер — имя или IP-адрес удаленной системы в формате «\\cервер».
query -Запрос состояния службы или перечисление состояний типов служб.
queryex — Запрос расширенного состояния службы или перечисление состояний типов служб.
start — Запуск службы.
pause — Отправка службе управляющего запроса PAUSE для приостановки ее работы.
interrogate — Отправка службе управляющего запроса INTERROGATE.
continue — Отправка службе управляющего запроса CONTINUE для возобновления ее работы.
stop — Отправка службе запроса STOP.
config — Изменение конфигурации службы (постоянное).
description — Изменение описания службы.
failure — Изменение действия, выполняемого службой при сбое.
failureflag — Изменение флага действия, выполняемого службой при сбое.
sidtype — Изменение типа SID службы.
privs — Изменение привилегий, требуемых для службы.
qc — Запрос данных конфигурации для службы.
qdescription — Запрос описания службы.
qfailure — Запрос действия, выполняемого службой при сбое.
qfailureflag — Запрос флага действия, выполняемого службой при сбое.
qsidtype — Запрос типа SID службы.
qprivs — Запрос привилегий, требуемых для службы.
qtriggerinfo — Запрос параметров службы.
qpreferrednode — Запрос предпочтительного узла NUMA службы.
delete — Удаление службы (из реестра).
create — Создание службы (добавление ее в реестр).
control — Отправка службе управляющего сигнала.
sdshow — Отображение дескриптора безопасности службы.
sdset — Установка дескриптора безопасности службы.
showsid — Отображение строки SID службы, соответствующей произвольному имени.
triggerinfo — Настройка параметров триггеров службы.
preferrednode — Задание предпочтительного узла NUMA службы.
GetDisplayName — Получение параметра DisplayName для службы.
GetKeyName — Получение имени раздела для службы (ServiceKeyName).
EnumDepend — Перечисление зависимостей службы.
Следующие команды не требуют имени службы:
sc сервер команда параметры boot -(ok | bad) Показывает, требуется ли сохранить последнюю загрузку в качестве последней удачной конфигурации загрузки
Lock -Блокировка базы данных служб
QueryLock -Запрос состояния блокировки (LockStatus) базы данных диспетчера управления службами (SCManager)
Справка для команд QUERY и QUERYEX:
Параметры QUERY и QUERYEX:
Если после команды query указано имя службы, будет возвращено cостояние этой службы. В этом случае дополнительные параметры не используются. Если после команды запроса указаны следующие параметры либо ничего не указано, выполняется перечисление служб.
type= — Тип служб для перечисления (driver, service, all) (по умолчанию = service)
state= — Состояние служб для перечисления (inactive, all) (по умолчанию = active)
bufsize= — Размер (в байтах) буфера перечисления (по умолчанию = 4096)
ri= — Номер индекса возобновления для начала перечисления (по умолчанию = 0)
group= — Группа служб для перечисления (по умолчанию = все группы)
Примеры использования SC.
sc query — Перечислить состояния активных служб и драйверов
sc query dnscache — Отобразить состояние службы DNS-клиент, имеющей короткое имя dnscache
Пример отображаемой информации:
Тип Состояние Код_выхода_Win32 | : 20 WIN32_SHARE_PROCESS : 4 RUNNING (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) : 0 (0x0) : 0 (0x0) : 0x0 : 0x0 |
sc \\mycomp queryex dnscache — отображение расширенного состояния службы DNS-клиент на компьютере с именем mycomp
Пример отображаемой информации:
Имя_службы: dnscache Тип Состояние Код_выхода_Win32 | : 20 WIN32_SHARE_PROCESS : 4 RUNNING (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) : 0 (0x0) : 0 (0x0) : 0x0 : 0x0 : 1312 : |
sc stop dnscache — остановить службу DNS-клиент на локальном компьютере
sc start dnscache — запустить службу DNS-клиент на локальном компьютере
sc query type= driver — отобразить информацию всех активных драйверов
sc query type= service — отобразить информацию всех активных служб Windows
sc query state= all — отобразить информацию всех активных драйверов и служб Windows
Обратите внимание на наличие пробела после знака равенства (state= all …) в параметрах перечисленных команд.
sc query type= driver group= NDIS — отобразить информацию обо всех драйверах группы NDIS ( сетевых драйверах )
Пример отображаемой информации:
Имя_службы: BfLwf
Выводимое_имя: Qualcomm Atheros Bandwidth Control
Тип Состояние   Код_выхода_Win32 Код_выхода_службы Контрольная_точка Ожидание | : 1 KERNEL_DRIVER : 4 RUNNING (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) : 0 (0x0) : 0 (0x0) : 0x0 : 0x0 |
.
.
.
Имя_службы: wna3100m
Выводимое_имя: NETGEAR WNA3100M N300 Wireless Mini USB Adapter
Тип Состояние   Код_выхода_Win32 Код_выхода_службы Контрольная_точка Ожидание | : 1 KERNEL_DRIVER : 4 RUNNING (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) : 0 (0x0) : 0 (0x0) : 0x0 : 0x0 |
sc query wna3100m — отобразить информацию о драйвере NETGEAR WNA3100M N300 Wireless Mini USB Adapter.
sc query type= interact — отобразить информацию обо всех интерактивных службах.
sc query state= inactive — отобразить информацию обо всех остановленных службах
sc query state= inactive > C:\Stopedsvc.txt — записать информацию обо всех остановленных службах в текстовый файл C:\Stopedsvc.txt . Перенаправление вывода в текстовый файл удобно использовать для сохранения информации и ее последующего использования.
sc qc dnscache — отобразить данные конфигурации для службы DNS-клиент.
Пример выводимой информации:
[SC] QueryServiceConfig: успех
Имя_службы: dnscache
Тип Тип_запуска Управление_ошибками Имя_двоичного_файла Группа_запуска Тег Выводимое_имя Зависимости &bnsp Начальное_имя_службы | : 20 WIN32_SHARE_PROCESS : 2 AUTO_START : 1 NORMAL : C:\Windows\system32\svchost.exe -k NetworkService : TDI : 0 : DNS-клиент : Tdx : nsi : NT AUTHORITY\NetworkService |
sc showsid dnscache — отобразить уникальный идентификатор SID службы DNS-клиент
Для конфигурирования системных служб используется команда sc config … , выполняющая изменение записи службы в реестре и в базе данных служб.
sc сервер config [имя службы] параметр1 параметр2.
Параметры командной строки:
Имя параметра включает знак равенства (=). Между знаком равенства и значением параметра должен быть пробел.
type= own|share|interact|kernel|filesys|rec|adapt — тип службы
start= boot|system|auto|demand|disabled|delayed-auto — тип запуска службы
error= normal|severe|critical|ignore — режим обработки ошибок
binPath= путь_к_двоичному_файлу — путь и имя исполняемого файла
group= группа_запуска — группа, к которой относится драйвер.
tag= yes|no наличие признака для определения порядка запуска внутри группы
depend= зависимости (разделенные / (косой чертой)) — зависимости службы
obj= имя_учетной_записи|имя_объекта
DisplayName= выводимое имя
password= пароль
Информация о драйверах и системных службах (сервисах) находится в разделе
HKLM\SYSTEM\CurrentControlSet\Services
Каждому драйверу или сервису соответствует свой раздел. Например, «msahci» — для драйвера стандартного SATA контроллера жестких дисков, «DNScache» — для службы «DNS клиент».
Создать службу windows cmd
Данный материал является зеркалом статьи сайта Заметки о WINDOWS с некоторыми примечаниями из личного опыта.
Иногда может потребоваться взять исполняемый файл и зарегистрировать его в качестве службы Windows. Для этого есть несколько способов. Два из них приведены ниже.
Для создания и службы из командной строки можно использовать программу SC (Sc.exe). SC представляет из себя утилиту командной строки, которая реализует вызовы ко всем функциям интерфейса прикладного программирования (API) управления службами Windows. С ее помощью можно производить любые действия со службами — просматривать состояние, управлять (запускать, останавливать и т.п.), изменять параметры, а также создавать новые службы.
При создании службы с помощью SC нет необходимости вручную создавать записи в реестре и затем перезагружать компьютер, чтобы обеспечить обновление базы данных диспетчером служб. Также SC позволяет указать имя удаленного компьютера, что дает возможность управлять службами как на локальном, так и на удаленном компьютере.
Для создания нового сервиса запускаем команду Sc create . Она создает запись службы в реестре и в базе данных диспетчера служб. Sc create имеет следующий синтаксис:
sc create [ServiceName] [binPath= ]
ServiceName — указывает имя, которое будет присвоено разделу службы в реестре. Имейте в виду, что это имя отличается от отображаемого имени службы (имени, которое отображается в оснастке «Services»);
binPath — указывает путь к исполняемому файлу службы.
Для примера создадим службу MyService, укажем отображаемое имя My New Service, зададим тип службы и поставим ее на авто-запуск:
Sc create MyService binPath=C:\MyService\MyService.exe DisplayName=″My New Service″ type=own start=auto
Затем откроем оснастку «Services» и посмотрим результат.
Изменять параметры уже созданной службы можно командой Sc config . Например, мне не понравилось отображаемое имя службы и я хочу его изменить:
Sc config MyService DisplayName=″My Service″
Ну и полностью удалить службу можно вот так:
Sc delete MyService
Примечание. Есть некоторые особенности использования утилиты sc. Например при создании сервиса в Windows XP необходимо ставить пробел перед аргументом, передаваемым параметру!
Если мы подадим команду:
C:\sc create Weblogic binPath=C:\Oracle\MiddleWare\user_projects\base_domain\startWeblogic.cmd DisplayName=»WebLogic» type=share start=auto error=ignore
В ответ получим help по использованию sc без какого либо сообщения об ошибке:
Подаем ту же команду вставив пробелы после символа «=»:
C:\>sc create Weblogic binPath= C:\Oracle\MiddleWare\user_projects\base_domain\startWeblogic.cmd DisplayName= «WebLogic» type= share start= auto error= ignore
[SC] CreateService SUCCESS
Вот такая недокументированная особенность.
Так же необходимо внимательно относится к прочим параметрам. В случае приведенном ниже изменены значения параметров start и type:
[SC] CreateService FAILED 87:
и после двоеточия никаких пояснений.
Подробное значение параметров можно посмотреть здесь или здесь.
Для изменения параметров системной службы нужно ввести новые параметры командой:
Для остановки службы:
Для перезагрузки службы:
Если требуется определить, какие службы будут зависеть от данной службы, можно набратьsc enumpend
Теперь, чтобы увидеть, какие службы находятся в зависимости от службы сервера под названием lanmanserver, надо подать команду
sc enumdepend Lanmanserver
Запуск такой команды на моем тестовом сервере Windows 2003, например, показывает, что службы Netlogon, Dfs, а также службы браузера компьютера находятся в зависимости от службы сервера.
Для завершения и определения зависимостей сервера можно воспользоваться подкомандой qc, как показано ниже
sc qc Lanmanserver
Эта команда выдает девять строчек информации о службе, одна из которых DEPENDENCIES. При запуске этой команды выясняется, что сервер не зависит ни от каких служб. Чтобы узнать, какие службы имеют более одной зависимости, можно протестировать диспетчер на службе Netlogon. Мы увидим, что служба Netlogon для начала работы требует запуска служб и сервера, и Workstation.
Иногда зависимости бывают более сложными. Например, некоторые службы могут начать работу, только если запущена одна из трех других служб. Запуск всех трех необязателен, вполне достаточно одной. Можно проинструктировать Windows по поводу такой динамики, информируя систему о том, что данная служба находится в зависимости от группы служб. В системе Windows имеется целый ряд таких служб, как, например, SCSI CDROM Class, SCSI miniport, Parallel arbitrator, NetBIOSGroup, NDIS, а также службы первичного диска и многие другие. Все эти службы и драйверы можно увидеть в списке групп, набрав
sc query type= service?driver?all group=
Например, чтобы посмотреть все службы и драйверы в группе служб первичного диска, нужно набрать
sc query type= all group=
Названия групп значения не имеют. Можно добавлять службы в имеющиеся группы или создавать новые группы служб, добавив команду group= groupname в команду SC Create или используя SC Config для сохранения службы в какую-либо группу. Например, чтобы добавить службу Webimagemailer в новую группу под названием unimportant, надо набрать
sc config webimagemailer group= unimportant
Однако нельзя поместить службу или драйвер в более чем одну группу служб.
Кроме того, можно сделать так, чтобы не происходила загрузка службы Webimagemailer без необходимой группы служб. Чтобы определить фиктивную группу Webstartup, воспользуемся параметром depends= webstartup. Чтобы указать Windows, что Webstartup — это группа, а не еще одна служба, следует перед ее именем поставить знак «плюс». Например, для перенастройки службы Webimagemailer на зависимость от группы запуска Webstartup, надо набрать
sc config webimagemailer depends= +webstartup
Таким образом, мы выяснили, как использовать зависимости и группы для более детального управления порядком загрузки службы. И теперь никто не удивится, почему я был так доволен, когда несколько лет назад обнаружил диспетчер SC.
PowerShell может почти все, в том числе и управлять службами Windows. Создать новую службу можно с помощью командлета New-Service . Создадим такой же сервис, как и в предыдущем примере, только добавим к нему описание (Description):
New-Service -Name MyService -BinaryPathName C:\MyService\MyService.exe`
-DisplayName ″My New Service″ -Description ″Very Important Service . ″
Изменить параметры службы можно командлетом Set-Service :
Set-Service -Name MyService -Description ″Not Very Important Service″ -StartupType Manual
В принципе PowerShell имеет примерно такой же функционал как и Sc.exe, разве что позволяет добавить описание. А вот для удаления служб в PS простого способа нет, придется воспользоваться вот такой конструкцией:
(Get-WmiObject win32_service -Filter ″name=′MyService′″).delete()