Как принудительно удалить службу windows

Я установил службу windows с помощью installUtil.exe.

После обновления кода я снова использовал installUtil.exe для установки службы без первоначальной первоначальной версии.

Когда я пытаюсь удалить службу, installUtil.exe успешно завершит удаление, но служба все еще появляется.

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

Как я могу принудительно удалить (предпочтительнее без перезапуска сервера)?

Ответ 1

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

Ответ 2

Вам не нужно перезагружать компьютер. Запустите cmd или PowerShell в повышенном режиме.

sc.exe queryex <SERVICE_NAME>

Затем вы получите некоторую информацию. Отобразится номер PID.

taskkill /pid <SERVICE_PID> /f

Где/f - принудительная остановка.

Теперь вы можете установить или запустить службу.

Ответ 3

Хорошо, вы можете использовать SC.EXE для принудительного удаления любых оконных сервисов, если un-install не удаляет их случайно.

sc delete <Service_Name>

Подробнее о "MS Techno Blogging" Удаление служб с помощью службы MMC

Ответ 4

Я знаю, что это не поможет, но это может помочь кому-то в будущем.

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

До этого обновление менеджера служб не помогло.

Ответ 5

sc delete sericeName

Просто убедитесь, что служба остановлена, прежде чем делать это. Я видел эту работу чаще всего. Бывают случаи, когда я вижу, что окна что-то застряли, и он настаивает на перезагрузке.

Ответ 6

К сожалению, вам необходимо перезапустить сервер. Это должно удалить "удаленный" сервис.

Ответ 7

Закройте окно cmd и services, если оно открыто, затем снова запустите cmd, щелкнув правой кнопкой мыши и выбрав "Запуск от имени администратора". Если sc delete sericeName не работает или ничего не работает.

http://weblogs.asp.net/avnerk/archive/2007/09/05/windows-services-services-msc-and-the-quot-this-service-is-marked-for-deletion-quot-error.aspx

Ответ 8

На всякий случай этот ответ помогает кому-то: как найдено here, вы можете сэкономить массу проблем Sysinternals Autoruns в качестве администратора. Просто зайдите на вкладку "Службы" и удалите свою службу.

Он помогло на машине, где у меня не было прав на редактирование реестра.

Ответ 9

Следующее будет работать без перезагрузки машины:

  • Поиск в реестре \HKEY_LOCAL_MACHINE для < Ваше имя службы > (оба ключа и значения)
  • Установите значение "Legacy" равным 0

Ответ 10

Вы пытаетесь остановить службу перед вызовом деинсталляции? У меня была эта проблема случайным образом. Когда-нибудь я смогу удалить его без перезагрузки. Я предполагаю, что это связано с тем, что служба все еще работает

Ответ 11

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

Как я устанавливаю свои службы Windows в процессе CI каждую ночь, мне нужно что-то, что работает все время и полностью автоматизировано. По какой-то причине службы были всегда отмечены для удаления в течение длительного времени (5 минут и более) после их удаления. Поэтому я расширил пакет переустановки script, чтобы убедиться, что служба действительно удалена (упрощенная версия):

REM Stop the service first
net stop My-Socket-Server

REM Same as installutil.exe, just implemented in the service
My.Socket.Server.exe /u

:loop1
    REM Easy way to wait for 5 seconds
    ping 192.0.2.2 -n 1 -w 5000 > nul
    sc delete My-Socket-Server
    echo %date% %time%: Trying to delete service.
    if errorlevel 1072 goto :loop1

REM Just for output purposes, typically I get that the service does not exist
sc query My-Socket-Server

REM Installing the new service, same as installutil.exe but in code
My.Socket.Server.exe /i

REM Start the new service
net start My-Socket-Server

Что я вижу, так это то, что служба помечена для удаления в течение примерно 5 минут (!), пока она наконец не пройдет. Наконец, мне больше не нужны ручные вмешательства. Я буду расширять script в будущем, чтобы что-то произошло через определенное время (например, уведомление через 30 минут).

Ответ 12

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

Ответ 13

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

Я открывал и закрывал MMC и искал PID, чтобы убивать, но при поиске в Process Explorer существовало несколько существующих процессов, запущенных из забытой запланированной партии. Убил их. Работа выполнена.

Ответ 14

В этом вопросе есть много вопросов форума.

Я нашел ответ в windows api. После удаления службы вам не нужно перезагружать компьютер. Вы должны позвонить:

BOOL WINAPI CloseServiceHandle(
  SC_HANDLE hSCObject
);

Это закрывает дескриптор службы. В Windows 7 она решила мою проблему. Я:

  • остановить службу
  • закрыть дескриптор
  • служба удаления
  • подождите 3 секунды
  • скопировать новый exe в каталог
  • установить службу
  • запуск службы
  • закрыть дескриптор

Ответ 15

Вы можете вручную удалить раздел реестра для своей службы, расположенный по адресу HKLM\SYSTEM\CurrentControlSet\Services, после чего вы не увидите службу в диспетчере управления сервисом (необходимо обновить или повторно открыть, чтобы увидеть изменение), и вы можете переустановить как обычно.

Ответ 16

Я использую следующую PowerShell, вымощенную из нескольких мест для наших экземпляров Octopus Deploy, когда TopShelf запутывается, или служба не работает по какой-либо другой причине.

$ServiceName = 'MyNaughtyService'
$ServiceName | Stop-Service -ErrorAction SilentlyContinue
# We tried nicely, now KILL!!!
$ServiceNamePID = Get-Service | Where { $_.Name -eq $ServiceName} # If it was hung($_.Status -eq 'StopPending' -or $_.Status -eq 'Stopping') -and
$ServicePID = (Get-WmiObject Win32_Service | Where {$_.Name -eq $ServiceNamePID.Name}).ProcessID
Stop-Process $ServicePID -Force

Ответ 17

Это сработало для меня

$a = Get-WmiObject Win32_Service | Where-Object {$_.Name -eq 'psexesvc'}
$a.Delete()

Ответ 18

Если вы не можете остановить службу в Службе, вы можете остановить службу Windows exe в Диспетчере задач. После этого вы можете удалить службу.