Как удалить службу Windows, если в системе не осталось исполняемого файла для нее?

166

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

Причина этого состояния, вероятно, из-за проблемы в пакете msi, которая неправильно удаляет службу, но как я могу это исправить, когда служба находится в этом состоянии?

Магнус Линде
источник

Ответы:

325

Вы должны иметь возможность удалить его с помощью sc.exe (я думаю, что он включен в Windows Resource Kit), выполнив в командной строке «Администратор» следующее:

sc.exe delete <service name>

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

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

Кроме того, вы можете напрямую вызвать API 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 delete

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

sc create "MorganTechService" binpath = "C: \ Program Files \ MorganTechSPace \ myservice.exe"

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

kombsh
источник
3
Безопасно ли делать это в реестре? Является ли «конечный результат» реестра таким же, как «конечный результат» sc delete?
Pacerier
5
Нет, я просто попытался удалить сервис из regedit напрямую. Как результат, теперь запись службы, которую я хотел удалить, остается в службе, а ее описание показывает: «<Не удалось прочитать описание. Код ошибки: 2>»
GJ.
11

нашел здесь

Я только что попробовал на Windows XP, это сработало

локальный компьютер: sc \\. удалить [service-name]

  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
Fredou
источник
10

Вот скрипт powershell для удаления службы foo

$foo= Get-WmiObject -Class Win32_Service -Filter "Name='foo'"
$foo.delete()
Нима Соруш
источник
9

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

Томас Братт
источник
Почему бы просто не использовать sc delete?
Pacerier
3

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

Samiksha
источник
Это хорошее предложение. Если это не сработает, ему может понадобиться переустановить, запустить installutil -u, а затем удалить
wcm
мы должны создать копию того же exe или переименование любого другого файла будет работать нормально?
Имран Ризви
@ Самикша, я думал, он сказал, что у него нет « копии исполняемых файлов »?
Pacerier
3

Я бы использовал PowerShell для этого

Remove-Service -Name "TestService"

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

JoeRod
источник
доступно только в PS6
BozoJoe
Я получаю ошибку ниже. [SC] OpenService FAILED 1060: указанная служба не существует в качестве установленной службы. Позже попробовал sc удалить <имя службы> с помощью Power Shell, и это работает! Благодаря идее силовой оболочки.
Crazydan