Programing

Windows 서비스를 강제로 제거하는 방법

lottogame 2020. 5. 28. 07:55
반응형

Windows 서비스를 강제로 제거하는 방법


installUtil.exe를 사용하여 Windows 서비스를 설치했습니다.

코드를 업데이트 한 후 installUtil.exe를 다시 사용하여 원래 버전을 먼저 제거하지 않고 서비스를 설치했습니다.

이제 서비스를 제거하려고하면 installUtil.exe가 제거를 성공적으로 완료하지만 서비스는 계속 나타납니다.

속성을 변경하려고하면 '서비스가 삭제 표시되었습니다'라는 메시지가 나타납니다.

서버를 다시 시작하지 않고 삭제를 강제로 수행하려면 어떻게해야합니까?


과거에 나를 사로 잡은 한 가지는 서비스 뷰어가 실행 중이면 서비스가 완전히 삭제되지 못하므로 미리 닫으십시오.


컴퓨터를 다시 시작할 필요는 없습니다. 상승 모드에서 cmd 또는 PowerShell을 시작하십시오.

sc.exe queryex <SERVICE_NAME>

그런 다음 정보를 얻을 수 있습니다. PID 번호가 표시됩니다.

taskkill /pid <SERVICE_PID> /f

여기서 / f는 강제 중지입니다.

이제 서비스를 설치하거나 시작할 수 있습니다.


SC.EXE를 사용하여 제거해도 우연히 제거되지 않으면 Windows 서비스를 강제로 삭제할 수 있습니다.

sc delete <Service_Name>

서비스 MMC에서 서비스를 강제로 삭제 하는 "MS Techno 블로그"에 대한 자세한 내용


나는 이것이 도움이되지 않을 것이라는 것을 알고 있지만 나중에 누군가를 도울 수 있습니다.

방금 동일한 문제가 발생하여 서비스 관리자를 닫았다가 다시 열면 레지스트리에서 항목을 모두 제거하고 서비스 제거를 완료했습니다.

그 이전에는 서비스 관리자를 새로 고치는 데 도움이되지 않았습니다.


sc delete sericeName

이 작업을 수행하기 전에 서비스가 중지되었는지 확인하십시오. 나는이 일을 가장 많이 보았다. 창에 무언가 붙어있는 것을 보았고 재부팅을 요구하는 경우가 있습니다.


불행히도 서버를 다시 시작해야합니다. "삭제 된"서비스를 제거해야합니다.


cmd 및 서비스 창을 닫은 후 마우스 오른쪽 단추를 클릭하고 관리자 권한으로 실행을 선택하여 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


이 답변이 누군가에게 도움이되는 경우를 대비하여 여기 에서 찾은 것처럼 관리자로 Sysinternals Autoruns실행하는 데 많은 어려움을 겪을 수 있습니다 . "서비스"탭으로 이동하여 서비스를 삭제하십시오.

레지스트리를 편집 할 권한이없는 컴퓨터에서 트릭을 수행했습니다.


머신을 다시 시작하지 않고 다음이 작동합니다.

  1. <서비스 이름>에 대한 레지스트리 \ HKEY_LOCAL_MACHINE을 검색하십시오 (키와 값 모두).
  2. "레거시"값을 0으로 설정

제거를 호출하기 전에 서비스를 중지하려고 했습니까? 이 문제가 무작위로 발생했습니다. 언젠가 다시 시작하지 않고 제거 할 수 있습니다. 내 생각에 그것은 여전히 ​​실행중인 서비스와 관련이 있습니다.


나는 늦었지만 대안을 추가하고 싶습니다. 이상하게 보일 수도 있지만 다른 방법은 보지 못했습니다.

매일 밤 CI 프로세스에 Windows 서비스를 설치하면서 항상 작동하고 완전히 자동화 된 무언가가 필요했습니다. 어떤 이유로 서비스를 제거한 후에는 서비스가 항상 오랫동안 (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

What I can see, is that the service is marked for deletion for about 5 minutes (!) until it finally goes through. Finally, I don't need any more manual interventions. I will extend the script in the future so that something happens after a certain time (e.g. notification after 30 minutes).


You can manually delete the registry key for your service, located at HKLM\SYSTEM\CurrentControlSet\Services, after that you won't see the service in service control manager (need to refresh or reopen to see the change), and you can reinstall the service as usual.


This worked for me

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

If you can not stop the service in Services, you can stop your windows service exe in Task Manager. After that, you can remove the service.


Refreshing the service list always did it for me. If the services window is open, it will hold some memory of it existing for some reason. F5 and I'm reinstalling again!


Also make sure that there are no instances of the executable still active (perhaps one that might have been running, for whatever reason, independently of the service).

I was opening and closing MMC and looking for the PIDs to kill - but when looking in process explorer there were a couple of extant processes running from a forgotten scheduled batch. Killed them. Job done.


There are plenty of forum questions in that subject.

I have found the answer in windows api. You don't need to restart the computer after uninstalling the service. You have to call:

BOOL WINAPI CloseServiceHandle(
  SC_HANDLE hSCObject
);

That closes the handle of the service. On windows 7 it solved my problem. I do:

  • stop service
  • close handle
  • uninstall service
  • wait 3 sec
  • copy new exe to the directory
  • install the service
  • start service
  • close handle

I use the following PowerShell cobbled together from a few places for our Octopus Deploy instances when TopShelf messes up or a service fails for some other reason.

$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

참고URL : https://stackoverflow.com/questions/225275/how-to-force-uninstallation-of-windows-service

반응형