Як видалити службу Windows, якщо в системі не залишилося виконуваного файлу?


166

Як видалити службу Windows, коли в системі не залишилося виконуваного файлу? Я не можу запустити, installutil -uоскільки в системі не залишилося виконуваного файлу. Я все ще бачу запис про послугу на консолі Services.

Причина такого стану, ймовірно, пов’язана з проблемою в пакеті msi, який не видаляє сервіс правильно, але як я можу це виправити, коли служба перебуває в такому стані?


Відповіді:


325

Ви повинні мати змогу видалити його за допомогою sc.exe (я думаю, він включений у комплект ресурсів Windows), виконавши в командному рядку "адміністратор" наступне:

sc.exe delete <service name>

де <service name>назва самого сервісу, як ви його бачите на консолі управління сервісом, а не в exe.

Ви можете знайти sc.exe в системній папці, і для його роботи потрібні адміністративні права. Більше інформації в цій статті Microsoft KB .

Крім того, ви можете безпосередньо зателефонувати у програму DeleteService () . Цей спосіб трохи складніший, оскільки вам потрібно отримати ручку до менеджера управління сервісом через OpenSCManager () тощо, але, з іншого боку, він дає вам більше контролю над тим, що відбувається.


Він зробив саме те, що я хотів, і видалив службу з реєстру. Він більше не з’являється на консолі Служб. Дякую!
Магнус Ліндхе

Я отримую "Доступ заборонено". Що робити далі?
Нік

4
Просто примітка для того, хто намагається виконати команду в Методі 1 в PowerShell: sc не для спілкування з менеджером управління сервісом. Це команда Set-Content. Використовуйте замість sc.exe.
Ясер Сінджаб

1
Якщо ви отримаєте помилку 1072, переконайтеся, що у вас немає відкритої панелі керування службами (див. Це інше питання )
Giles

Я отримував помилку нижче. [SC] OpenService FAILED 1060: Зазначена служба не існує як встановлена ​​служба. Пізніше спробували те ж саме з силовою оболонкою, і це працює!
crazydan

24

Видаліть службу Windows через реєстр

Видалити службу з реєстру дуже просто, якщо ви знаєте правильний шлях. Ось як я це зробив:

  1. Запустіть Regedit або Regedt32

  2. Перейдіть до запису реєстру "HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlSet / Services"

  3. Знайдіть службу, яку потрібно видалити, і видаліть її. Ви можете подивитися на клавіші, щоб знати, які файли використовувала служба, а також видалити їх (якщо потрібно).

Видаліть службу Windows через вікно команд

Крім того, ви можете також використовувати командний рядок та видалити службу за допомогою наступної команди:

sc видалити

Ви також можете створити сервіс за допомогою наступної команди

sc створити "MorganTechService" binpath = "C: \ Програмні файли \ MorganTechSPace \ myservice.exe"

Примітка. Можливо, вам доведеться перезавантажити систему, щоб оновити список у менеджері послуг.


3
Це безпечно для реєстру? Чи "кінцевий результат" реєстру такий самий, як "кінцевий результат" sc delete?
Pacerier

5
Ні, я просто спробував видалити службу з regedit безпосередньо. Як результат, тепер запис послуги, яку я хотів видалити, залишається в службі, а в її описі видно: "<Не вдалося прочитати опис. Код помилки: 2>"
GJ.

11

знайдені тут

Я просто спробував на Windows XP, він працював

локальний комп'ютер: sc \\. видалити [ім'я служби]

  Deleting services in Windows Server 2003

  We can use sc.exe in the Windows Server 2003 to control services, create services and delete services. Since some people thought they must directly modify the registry to delete a service, I would like to share how to use sc.exe to delete a service without directly modifying the registry so that decreased the possibility for system failures.

  To delete a service: 

  Click “start“ - “run“, and then enter “cmd“ to open Microsoft Command Console.

  Enter command:

  sc servername delete servicename

  For instance, sc \\dc delete myservice

  (Note: In this example, dc is my Domain Controller Server name, which is not the local machine, myservice is the name of the service I want to delete on the DC server.)

  Below is the official help of all sc functions:

  DESCRIPTION:
    SC is a command line program used for communicating with the
    NT Service Controller and services. 
  USAGE:
          sc

10

Ось сценарій повноважень для видалення послуги foo

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

9

Мій улюблений спосіб зробити це - використовувати додаток Sysinternals Autoruns . Просто виберіть службу і натисніть видалити.


Чому б просто не використовувати sc delete?
Pacerier

3

Створіть копію виконуваних файлів тієї самої служби та вставте її на той самий шлях існуючої служби та видаліть її.


Це гарна пропозиція. Якщо це не працює, йому може знадобитися перевстановити, запустити installutil -u і потім видалити
wcm

чи потрібно нам створити копію того ж EXE або перейменування будь-якого іншого файлу спрацювало б добре?
Імран Різві

@Samiksha, я думав, що він сказав, що у нього немає " копії виконуваних файлів "?
Pacerier

3

Я б для цього використовував PowerShell

Remove-Service -Name "TestService"

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/remove-service


доступний лише у
PS6

Я отримував помилку нижче. [SC] OpenService FAILED 1060: Зазначена служба не існує як встановлена ​​служба. Пізніше спробували sc видалити <ім'я служби> з оболонкою живлення, і вона працює! Завдяки ідеї силової оболонки.
crazydan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.