Как нормально удалить службу в Виндовс?

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

В графической оснастки управления службами Виндовс ( services.msc ) доступны только базисные клавиши для пуска, приостановки и отключения службы. Удалить службу при помощи этой консоли нельзя.

Приемлим, наша задачка удалить неиспользуемую службу Stunnel TLS wrapper (в моем случае она использовалась для кодирования трафика до stunnel сервера). Сначала, необходимо получить имя службы. В данном случае это stunnel (скопировать имя можно из поля Service name)

В маленьком дисклаймере напомню, что необходимо быть внимательным при удалении служб и отдавать для себя отчет в ваших действиях. Перед удалением службы советуется поначалу отключить её и поработать некое время, чтоб удостовериться, что стабильность работы вашего окружения не нарушена. Отключить автозапуск службы можно PowerShell командой:

Set-Service stunnel –startuptype disabled –passthru
Stop-Service stunnel

Кроме того, перед удаление службы, изучите перечень зависимых служб (параметр DependentServices):

Get-Service Schedule -DependentServices

Перед тем, как удалять службу, ее нужно остановить. Нажмите кнопку Stop в консоли Services или выполните команду:

net stop stunnel

Настройки служб хранятся в ветке реестра HKLMSYSTEMCurrentControlSetServices. Если перед удалением службы вы хотите создать резервную копию с ее настройками, можно экспортировать конфигурацию службы в REG файл с помощью команды:

reg export "HKLMSYSTEMCurrentControlSetServicesstunnel" "C:stunnel_backup.reg" /y

После этого можно удалить службу по ее имени с помощью встроенной утилиты sc.exe (если имя службы содержит пробелы, возьмите его в кавычки):

sc delete stunnel

Должно появится сообщение:

[SC] DeleteService SUCCESS

Утилита sc.exe позволяет управлять службами на удаленном компьютере. Чтобы остановить службу и удалить ее на компьютере SRV1, выполните;

sc.exe \SRV1 stop "MyService"
sc.exe \SRV1 delete "MyService"

Или можно удалить сервис с помощью PowerShell:

Remove-Service stunnel

Командлет Remove-Service доступен в PowerShell Core 6.x и новее.

В Windows PowerShell 5.1 вместо этого командлета для удаления службы можно использовать WMI:

$service = Get-WmiObject -Class Win32_Service -Filter "Name='stunnel'"
$service.delete()

Также для удаления службы достаточно просто удалить ее ветку из раздела реестра HKLMSYSTEMCurrentControlSetServices. Найдите службу в списке, проверьте что в парамтерах DisplayName and ImagePath указаны имя и путь к исполняемому файлу службы, которую вы планируете удалить. Удалите ветку службы целиком.

Обновите список служб в консоли Services (клавиша F5 ), и проверьте что она исчезла из списка. В большинстве случаев после удаления службы рекомендуется перезагрузить Windows. После перезагрузки вы можете удалить исполняемые файлы, и директории, на которые ссылалось значение параметра реестра ImagePath.

При удалении некоторых служб в командной строке может появится о том, что служба помечена на удаление. При этом фактически служба не удаляется:

DeleteService FAILED 1072: The specified service has been marked for deletion.

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

Если нужно удалить службу без перезагрузки Windows, нужно с помощью команды taskill или из Task Manager остановить запущенный исполняемый процесс службы. А затем удалить ее ветку в реестре с помощью такой PowerShell команды:

Get-Item HKLM:SYSTEMCurrentControlSetServicesstunnel | Remove-Item -Force -Verbose


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *