Как принудительно удалить службу windows
Я установил службу windows с помощью installUtil.исполняемый.
после обновления кода я использовал installUtil.exe снова, чтобы установить службу без удаления исходной версии в первую очередь.
когда я сейчас пытаюсь удалить службу, installUtil.exe успешно завершает удаление, но служба все еще появляется.
Если я попытаюсь изменить его свойства, я получаю сообщение "сервис помечен для удаления".
Как я могу заставить удаление (предпочтительно без перезагрузки сервера)?
18 ответов:
одна вещь, которая поймала меня в прошлом, заключается в том, что если у вас есть средство просмотра служб, то это предотвращает полное удаление служб, так близко, что заранее
вам не нужно перезагружать компьютер. Запустите cmd или PowerShell в повышенном режиме.
sc.exe queryex <SERVICE_NAME>затем вы получите некоторую информацию. ПИД количество покажет.
taskkill /pid <SERVICE_PID> /fгде /f-принудительная остановка.
теперь вы можете установить или запустить свои услуги.
ну, вы можете использовать SC.EXE для удаления любой службы windows принудительно, если un-install не удаляет случайно.
sc delete <Service_Name>подробнее о "MS Techno Blogging" принудительное удаление служб из службы MMC
Я знаю, что это не поможет, но это может помочь кому-то в будущем.
У меня только что была та же проблема, закрытие и повторное открытие Диспетчер служб удалил обе записи из реестра и завершил удаление службы.
до этого обновление менеджера служб не помогло.
sc delete sericeNameпросто убедитесь, что служба остановлена, прежде чем делать это. Я видел эту работу в большинстве случаев. Есть моменты, когда я видел, что окна застревают на чем-то, и он настаивает на перезагрузке.
закройте окно cmd и services, если оно открыто, затем снова запустите cmd, щелкнув правой кнопкой мыши и выбрав Запуск от имени администратора. Если
sc delete sericeNameне работает или ничего не работает.
на всякий случай этот ответ кому-то помогает: как нашел здесь, вы можете сэкономить много проблем с запуском Sysinternals Autoruns в качестве администратора. Просто перейдите на вкладку "Услуги" и удалите свой сервис.
Он сделал трюк для меня на машине, где у меня не было разрешение на редактирование реестра.
следующий будет работать без перезагрузки машины:
- Поиск реестра \ HKEY_LOCAL_MACHINE для (оба ключа и значения)
- установите значение "Legacy" в 0
вы пытались остановить службу перед вызовом uninstall? У меня была эта проблема случайно. Когда-нибудь я мог бы удалить его без перезагрузки. Я предполагаю, что это связано с тем, что Служба все еще работает
Я опаздываю, но хотел бы добавить альтернативу, которая может показаться странной, но я не видел другого пути:
поскольку я устанавливаю свои службы Windows в процесс CI каждую ночь, мне нужно было что-то, что работает все время и полностью автоматизировано. По какой-то причине службы всегда были помечены для удаления в течение длительного времени (5 минут или более) после их удаления. Поэтому я расширил пакетный сценарий переустановки, чтобы убедиться, что служба действительно удалена (упрощенная версия):
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 минут (!) пока он, наконец,не пройдет. Наконец, мне больше не нужно никаких ручных вмешательств. Я буду расширять скрипт в будущем, чтобы что-то произошло через определенное время (например, уведомление через 30 минут).
обновление списка услуг всегда делал это для меня. Если окно службы открыто, оно будет содержать некоторую память о нем, существующую по какой-то причине. F5 и я снова устанавливаю!
также убедитесь, что нет экземпляров исполняемого файла все еще активны (возможно, тот, который мог бы быть запущен, по какой-либо причине, независимо от службы).
я открывал и закрывал MMC и искал PIDs, чтобы убить, но при просмотре в Process explorer было несколько существующих процессов, запущенных из забытого запланированного пакета. Убить их. Дело сделано.
есть много вопросов форума в этой теме.
Я нашел ответ в Windows api. Перезагрузка компьютера после удаления службы не требуется. Вы должны позвонить:
BOOL WINAPI CloseServiceHandle( SC_HANDLE hSCObject );это закрывает дескриптор службы. На windows 7 это решило мою проблему. Я делаю:
- остановить службу
- закрыть дескриптор
- удаление услуги
- подождите 3 сек
- скопировать новый exe в каталог
- установить службу
- запустить службу
- закрыть дескриптор
вы можете вручную удалить раздел реестра для вашего сервиса, расположенный по адресу
HKLM\SYSTEM\CurrentControlSet\Services, после этого вы не увидите в диспетчере управления службами (нужно обновить или открыть, чтобы увидеть изменения), и вы можете переустановить службу как обычно.
Я использую следующий PowerShell, собранный из нескольких мест для наших экземпляров развертывания Octopus, когда 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
это сработало для меня
$a = Get-WmiObject Win32_Service | Where-Object {$_.Name -eq 'psexesvc'} $a.Delete()
Если вы не можете остановить службу в услуги, вы можете остановить службу Windows exe в Диспетчер Задач. После этого вы можете удалить сервис.
Comments