Практическое руководство. Установка и удаление служб Windows
Эта документация не относится к последней версии службы Windows. Последние сведения о службах Windows, использующих BackgroundService и шаблон службы рабочих ролей, см. в следующих разделах:
- Службы рабочей роли в .NET
- Создание службы Windows с использованием BackgroundService
Если вы разрабатываете службу Windows, используя .NET Framework, можно быстро установить приложение службы с помощью служебной программы командной строки InstallUtil.exe или PowerShell. Если вы являетесь разработчиком и хотите создать службу Windows, которую пользователи могут устанавливать и удалять, можно использовать бесплатный набор инструментов WiX Toolset или коммерческие средства, такие как Advanced Installer, InstallShield и другие. См. сведения о создании пакета установщика (классическое приложение Windows).
Если вы хотите удалить службу на своем компьютере, не выполняйте процедуру, описанную в этой статье. Вместо этого определите, какая программа (или программный пакет) установила эту службу, а затем выберите Приложения в параметрах, чтобы удалить эту программу. Многие службы являются составной частью ОС Windows. Если их удалить, это может привести к нестабильной работе системы.
Чтобы использовать процедуру, описанную в этой статье, сначала необходимо добавить установщик службы в свою службу Windows. Дополнительные сведения см. в разделе Пошаговое руководство: создание диспетчера служб Windows.
Проекты служб Windows нельзя запускать напрямую из среды разработки Visual Studio путем нажатия клавиши F5 . Перед запуском проекта необходимо установить службу в проекте.
Запустите обозреватель сервера и убедитесь, что служба установлена или удалена.
Установка с помощью программы InstallUtil.exe
- В меню Пуск выберите каталог Visual Studio версия> , а затем выберите Командная строка разработчика для VS версия> . Появится командная строка разработчика для Visual Studio.
- Откройте каталог, где находится скомпилированный исполняемый файл вашего проекта.
- Запустите InstallUtil.exe из командной строки, указав исполняемый файл проекта в качестве параметра:
installutil .exe
- Для 32-разрядной версии .NET Framework 4 или 4.5 и более поздних версий: если каталог установки Windows — C:\Windows, по умолчанию используется путь C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe.
- Для 64-разрядной версии .NET Framework 4 или 4.5 и более поздних версий: по умолчанию используется путь C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe.
Удаление с помощью служебной программы InstallUtil.exe
- В меню Пуск выберите каталог Visual Studio версия> , а затем выберите Командная строка разработчика для VS версия> . Появится командная строка разработчика для Visual Studio.
- Запустите InstallUtil.exe из командной строки, указав выходные данные проекта в качестве параметра:
installutil /u .exe
Установка с помощью PowerShell
- В меню Пуск выберите Каталог Windows PowerShell и Windows PowerShell.
- Откройте каталог, где находится скомпилированный исполняемый файл вашего проекта.
- Запустите командлет New-Service, используя имя службы и выходные данные проекта в качестве аргументов.
New-Service -Name "YourServiceName" -BinaryPathName .exe
Удаление с помощью PowerShell
- В меню Пуск выберите Каталог Windows PowerShell и Windows PowerShell.
- Выполните командлет Remove-Service, указав в качестве аргумента имя службы.
Remove-Service -Name "YourServiceName"
Примечание Чтобы использовать этот командлет, требуется PowerShell 6 или более поздней версии. Дополнительные сведения см. в статье Установка PowerShell в Windows.
sc.exe delete "YourServiceName"
См. также
- Знакомство с приложениями служб Windows
- Практическое руководство. Создание служб Windows
- Практическое руководство. Добавление установщиков в приложение-службу
- Installutil.exe (установщик)
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Управление службами Windows с помощью PowerShell

27.07.2020

itpro

PowerShell, Windows 10, Windows Server 2016

комментариев 12
В Windows вы можете управлять службами не только из графической консоли services.msc или утилиты командной строки Sc.exe (первоначальна включалась в пакет ресурсов Resource Kit), но и с помощью PowerShell. В этой статье мы смотрим различные сценарии управления службами Windows с помощью PowerShell.
Основные командлеты PowerShell для управления службами Windows
Существует восемь основных командлетов Service, предназначенных для просмотра состояния и управления службами Windows.
Чтобы получить весь список командлетов Service, введите команду:

- Get-Service — позволяет получить службы на локальном или удаленном компьютере, как запущенные, так и остановленные;
- New-Service – создать службу. Создает в реестре и базе данных служб новую запись для службы Windows;
- Restart-Service – перезапустить службу. Передает сообщение об перезапуске службы через Windows Service Controller
- Resume-Service – возобновить службы. Отсылает сообщение о возобновлении работы диспетчеру служб Windows;
- Set-Service — изменить параметры локальной или удаленной службы, включая состояние, описание, отображаемое имя и режим запуска. Этот командлет также можно использовать для запуска, остановки или приостановки службы;
- Start-Service – запустить службу;
- Stop-Service – остановить службу (отсылает сообщение об остановке диспетчеру служб Windows);
Получить подробное описание и примеры использования конкретного командлета можно через Get-help:

Get-Service: получаем список служб и их состояние
Получить список и состояние (Running/Stopped) службы на локальном или удаленном компьютере можно с помощью командлета Get-Service. Параметр -Name позволяет делать отбор по имени службы. Имя службы можно задать с использованием подстановочного символа *.

Если вы не знаете точное имя службы, есть возможность найти службы по отображаемому имени с помощью параметра –DisplayName. Можно использовать список значений и подстановочные знаки.

.
Командлет Get-Service можно использовать для получения состояния служб на удаленных компьютерах, указав параметр -ComputerName. Можно опросить статус службы сразу на множестве удаленных компьютеров, их имена нужно перечислить через запятую. Например, приведенная ниже команда получает состояние службы Spooler на удаленных компьютерах RM1 и RM2.
Get-Service spooler –ComputerName RM1,RM2
Status Name DisplayName ------ ---- ----------- Running spooler Print Spooler Stopped spooler Print Spooler
Вывести все свойства службы позволит командлет Select-Object:
Get-Service spooler | Select-Object *

Командлет Select-Object позволит вывести определенные свойства службы. Например, нам нужно вывести имя, статус и доступные возможности службы Spooler:
Get-Service Spooler | Select DisplayName,Status,ServiceName,Can*

Командлет Get-Service имеет два параметра, которые позволяют получить зависимости служб:
- Параметр -DependentServices позволяет вывести службы, которые зависят от данной службы;
- Параметр -RequiredServices позволяет вывести службы, от которых зависит данная служба.
Приведенная ниже команда выводит службы, необходимые для запуска службе Spooler:
Get-Service –Name Spooler -RequiredServices

Следующая команда выводит службы, которые зависят от службы Spooler:
Get-Service –Name Spooler -DependentServices

При необходимости найти службы с определенным состоянием или параметрами, используйте командлет Where-Object. Например, получим список запущенных служб со статусом Running:

Для вывода служб с типом запуска Manual, выполните команду

.starttype -eq » width=»» />.starttype -eq » width=»» />
Проверить, что в системе имеется указанная служба:
if (Get-Service «ServiceTest» -ErrorAction SilentlyContinue)
<
Write-host «ServiceTest exists»
>
Остановка, запуск, приостановка и перезапуск служб из PowerShell
Остановить службу можно с помощью командлета Stop-Service. Чтобы остановить службу печати, выполните команду:
Stop-Service -Name spooler
Командлет Stop-Service не выводит никаких данных после выполнения. Чтобы увидеть результат выполнения команды, используйте параметр -PassThru.

Обратите внимание, что не каждую службу можно остановить. Если есть зависимые службы, то получите ошибку
Cannot stop service because it has dependent services. It can only be stopped if force flag set.

Для принудительной остановки используйте параметр –Force. Вы должны помнить, что остановятся также все зависимые службы:
Stop-Service samss –Force -Passthru
Следующая команда остановит перечисленные службы (bits,spooler) со статусом ”Running”:
get-service bits,spooler | where | stop-service –passthru

Иногда службы зависают в статусе Stopping и их процессы приходится завершать принудительно.
Командлет Start-Service запускает остановленные службы:
Start-Service -Name spooler -PassThru

Служба не запустится, если есть остановленные зависимые службы. Чтобы их найти и включить:
get-service samss | Foreach

Командлет Suspend-Service может приостанавливать службы, допускающие временную приостановку и возобновление. Для получения сведений о возможности временной приостановки конкретной службы используйте командлет Get-Service со свойством «CanPauseAndContinue«.
Get-Service samss | Format-List name, canpauseandcontinue

Чтобы отобразить список всех служб, работа которых может быть приостановлена, введите команду:

Приостановим службу SQLBrowser:
Suspend-Service -Name SQLBrowser

Для возобновления работы приостановленной службы служит командлет Resume-service:
Resume-Service -Name SQLBrowser

Следующая команда возобновляет работу всех приостановленных служб:
get-service | where-object | resume-service
Командлет Restart-Service перезапускает службу:
Restart-Service -Name spooler

Эта команда запускает все остановленные сетевые службы компьютера:
get-service net* | where-object | restart-service
Параметр —ComputerName у этих командлетов отсутствует, но их можно выполнить на удаленном компьютере с помощью командлета Invoke-Command или через пайп:
Например, чтобы перезапустите очередь печати на удаленном компьютере RM1, выполните команду:
Get-Service Spooler -ComputerName RM1 | Start-Service
По умолчанию только администраторы могут запускать/останавливать службы в Windows, но вы можете предоставить права на перезапуск конкретной службы и обычным пользователям.
Set-Service – изменение настроек службы Windows
Командлет Set-Service позволяет изменить параметры или настройки служб на локальном или удаленном компьютере. Так как состояние службы является свойством, этот командлет можно использовать для запуска, остановки и приостановки службы. Командлет Set-Service имеет параметр -StartupType, позволяющий изменять тип запуска службы.
Изменим тип запуска службы spooler на автоматический:
Set-Service spooler –startuptype automatic –passthru

Можно перевести службу на ручной (manual) запуск:
Set-Service spooler –startuptype manual –passthru

Создание и удаление служб Windows c помощью PowerShell
New-Service – командлет для создания новой службы в Windows. Для новой службы требуется указать имя и исполняемый файл (вы можете запустить PowerShell скрипт как службу Windows).
В примере создадим новую службу с именем TestService.
new-service -name TestService -binaryPathName «C:\WINDOWS\System32\svchost.exe -k netsvcs»

С помощью параметра Get-WmiObject получим информацию о режиме запуска и описание службы
get-wmiobject win32_service -filter «name=’testservice'»

Изменить параметры новой службы можно командой
Set-Service -Name TestService -Description ‘My Service’ -StartupType Manual

Чтобы удалить службу используйте команду
(Get-WmiObject win32_service -Filter ″name=′TestService′″).delete()
Изменение учетной записи для запуска службы
Вы можете изменить учетную запись, из-под которой запускается служба. Получим имя учетной записи, которая используется для запуска службы TestService
get-wmiobject win32_service -filter «name=’TestService'» | Select name,startname

Для изменения имени и пароля учетной записи выполняем команды.
$svc = get-wmiobject win32_service -filter «name=’TestService'»
$svc.GetMethodParameters(«change»)
В результате получаем список параметров метода Change(). Считаем на каком месте находятся параметры StartName и StartPassword – 20 и 21 место соответственно.

$svc | Invoke-WmiMethod -Name Change –ArgumentList @ ($null,$null,$null,$null,$null,$null,$null, $null,$null,$null,$null,$null,$null,$null,$null,$null, $null,$null,$null,»Administrator»,»P@ssw0rd»)
Либо вы можете указать имя gMSA аккаунта. Пароль при этом не указывается.

Как видите, PowerShell позволяет легко управлять службами Windows. Можно создавать, останавливать, запускать и возобновлять службы, менять их свойства. Большинство командлетов позволяют управлять службами на удаленных компьютерах.
Предыдущая статья Следующая статья
sc.exe delete
Deletes a service subkey from the registry. If the service is running or if another process has an open handle to the service, the service is marked for deletion.
We don’t recommend you to use this command to delete built-in operating system services such as DHCP, DNS, or Internet Information Services. To install, remove, or reconfigure operating system roles, services and components, see Install or Uninstall Roles, Role Services, or Features
Syntax
sc.exe [] delete []
Parameters
| Parameter | Description |
|---|---|
| Specifies the name of the remote server on which the service is located. The name must use the Universal Naming Convention (UNC) format (for example, \myserver). To run SC.exe locally, don’t use this parameter. | |
| Specifies the service name returned by the getkeyname operation. | |
| /? | Displays help at the command prompt. |
Examples
To delete the service subkey NewServ from the registry on the local computer, type:
sc.exe delete NewServ
Related links
Как удалить службу в Windows 10

В этой статье описан простой способ, позволяющий удалить практически любую службу в Windows 10 средствами операционной системы, таких как командная строка и системный реестр Windows.
Прежде чем удалить службу, необходимо уяснить несколько моментов:
- При удалении службы она навсегда исчезнет из системы, и восстановить ее непросто, а в ряде случаем просто невозможно.
- Удаление определенных служб может вызвать неработоспособность тех или иных программ. Поэтому не стоит удалять службу, если вы на 100% не уверены за что она отвечает.
- Не удаляйте системные службы Windows 10, так как это может привести к неработоспособности всей системы.
Также нужно понять, в каких случаях возникает необходимость в удалении службы Windows.
- Зачастую программы при удалении из системы оставляют свои службы нетронутыми, и каждый раз при загрузке компьютера система пытается запустить такую службу, однако из-за отсутствия исполняемых или библиотечных файлов сделать этого не может, генерируя ошибку.
- Некоторые вирусы и трояны для маскировки своих деструктивных действий могут создать в системе новую службу. И даже если, ваш антивирус удалит тело вируса, служба может остаться, и ее придется удалять вручную.
- Возможно также ситуация, когда производительность системы снижается вследствие наличия большого количества процессов, работающих в виде служб, и вы решили удалить (а не просто остановить) ряд ненужных более служб в Windows 10.
Как узнать имя службы

Чтобы удалить службу в Windows 10, нужно знать её имя. Посмотреть информацию о службах можно в окне управления службами, для этого нажмите сочетание клавиш + R, в открывшемся окне Выполнить введите (скопируйте и вставьте) services.msc и нажмите клавишу Enter ↵.

В открывшемся окне «Службы», найдите ту службу, которую вы планируете удалить (в данном примере это служба «SynTPEnh Caller Service”).

Дважды щелкните по выбранной службе и в появившемся окне свойств службы, в поле Имя службы: будет отображено ее имя (в данном случае имя службы — SynTPEnhService, т.е. оно не совпадает с именем в списке служб, но бывает что имя службы совпадает с отображаемым именем), скопируйте его в буфер обмена.

Если служба работает, остановите ее нажав на кнопку Остановить.
Как удалить службу в командной строке
Чтобы удалить службу в Windows, откройте окно командной строки с правами администратора, и далее воспользуемся системной командой sc средства настройки диспетчера служб sc.exe. Команда SC используется для конфигурирования, опроса состояния, остановки, запуска, удаления и добавления системных служб в командной строке Windows.
Синтаксис команды удаления службы выглядит так:
где вместо ServiceName указывается имя удаляемой службы.
Если имя службы содержит пробелы, его нужно взять в кавычки.
В данном случае команда выглядит так:

В случае успешного выполнения команды sc delete в командной строке должно появиться сообщение:
[SC] DeleteService: успех.
Теперь, если в консоли управления службами нажать клавишу F5, вы увидите, что служба удалена и в списке не значится.
Как удалить службу в редакторе реестра
Альтернативный метод удаления служб в Windows подразумевает использование редактора реестра. Но прежде чем вносить какие-либо изменения в реестр, настоятельно рекомендуется создать точку восстановления.

Откройте редактор реестра, для этого нажмите сочетание клавиш + R, в открывшемся окне Выполнить введите (скопируйте и вставьте) regedit и нажмите клавишу Enter ↵.

В открывшемся редакторе реестра перейдите по следующему пути:
В ней содержится список всех служб, установленных в системе.
Найдите имя раздела реестра, соответствующее имени удаляемой службы.
Удостоверьтесь, что в значениях DisplayName и ImagePath содержатся, соответственно имя и путь к исполняемому файлу службы, которую вы планируете удалить.
Щелкните правой кнопкой мыши по имени найденного раздела реестра с именем службы и выберите Удалить .

После этих действий служба будет удалена из системы. Данная инструкция применима не только к операционной системе Windows 10, но и также к Windows 8.1, Windows 8.