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


173

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

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

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

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

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


서비스가 중단되고 삭제가 작동하지 않는 경우 Windows 서비스를 강제로 제거하는 방법
Wernfried Domscheit

답변:


469

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


70
뷰어를 열면 서비스가 중단된다고 믿을 수 없습니다.
Draemon

1
이것은 Microsoft의 어리석은 일이지만 실제로 작동합니다. 설명 할 수없는 이유로 서비스 뷰어를 열면 서비스가 제대로 삭제되지 않습니다.
ivantod

1
이 답변은 비슷한 수백 가지의 의견을 가질 것이라고 생각합니다. 나는이 어리석은 문제로 30 분을 잃었습니다 ...
PierrOz

2
SysInternals 프로세스 탐색기도 서비스 (및 작업 관리자)를 잠그므로 너무 닫으십시오!
danio

3
또한 cmd prompt를 사용하십시오. PowerShell은 오류를 표시하지 않지만 삭제하지는 않습니다.
Bruno Faria

145

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

sc.exe queryex <SERVICE_NAME>

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

taskkill /pid <SERVICE_PID> /f

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

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


2
재부팅 이외의 다른 모든 작업이 실패한 경우 대충 일했습니다.
DaveF

36
이것은 나를 위해 작동하지 않았습니다-내 서비스의 pid는 0을 반환했으며 중요한 시스템 프로세스를 삭제할 수 없었습니다.
plasma147

4
굉장합니다. 위의 sc delete를 사용하십시오.
Zone12

7
PID가 0으로 나오지 않아서 문제가 해결되었습니다.- (SC) DeleteService FAILED 1072
Web-E

3
절대적으로 도움이됩니다! 필자의 경우 재부팅이 전혀 효과가 없었습니다. 레지스트리에서 서비스 디렉토리를 삭제하지 않아도됩니다! 한 가지 문제 : PowerShell에서 작업하는 경우 다음을 사용하십시오 sc.exe queryex <SERVICENAME>. 때문에 sc또한 별칭입니다 Set-Content당신이 그것을 사용할 때, 그것은 자동으로 실패합니다.
Ifedi Okonkwo

97

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

sc delete <Service_Name>

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


5
고마워 "서비스 이름"이 "표시 이름"과 동일하지 않으면 서비스 속성에서 "서비스 이름"을 얻을 수 있습니다.
GuiSim

8
sc delete또한 서비스에 대한 핸들이 열려 있으면 "서비스가 삭제 된 것으로 표시됨"을보고합니다.
Matt

@GuiSim 덕분에 많은 사람들이 내가했던 것처럼 표시 이름을 넣을 것입니다!
nik0lai

[SC] DeleteService FAILED 1072 : 지정된 서비스가 삭제 표시되었습니다.
Andrew W. Phillips

37

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

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

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


1
설명해 주셔서 감사합니다. 제 경험은 정확히 당신이 설명한대로였습니다.
pk.

10
sc delete sericeName

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


scadd 명령을 실행하기 위해 관리자 권한으로 dos prompt / .NET 프롬프트를 실행해야했습니다.
Dav.id

SC DELETE 전에 "NET STOP <serviceName>"을 실행하여 삭제하기 전에 서비스가 중지되었는지 확인하십시오
Adi

이것은 또한 내 경험이었습니다. 결국 부분적으로 제거 된 완고한 서비스를 제거하기 위해 결국 재부팅해야했습니다 (코드 2와 함께 스냅에 여전히 나타납니다). 재부팅은 마침내 사라졌습니다.
delliottg


4

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


12
아니요. 다시 시작할 필요가 없습니다. 내 솔루션을 참조하십시오 :)
johan

2
나는 실제로 user186749의 솔루션을 더 좋아합니다. 좋고 깨끗합니다.
McKay

3

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

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


3

에있는 서비스의 레지스트리 키를 수동으로 삭제할 수 있으며 HKLM\SYSTEM\CurrentControlSet\Services, 그 후에는 서비스 제어 관리자에 서비스가 표시되지 않으며 (변경 사항을 보려면 새로 고치거나 다시 열어야 함) 평소와 같이 서비스를 다시 설치할 수 있습니다.


Windows 2012 R2에서 서비스 MMC 스냅인 (Services.MSC)에 " 설명을 읽지 못했습니다. 오류 코드 : 2 "가 표시됩니다. 다른 모든 MMC가 닫히고 다른 사용자가 로그인하지 않았음에도 불구하고.
Signal15

나는 Windows 8 및 Windows 10에서만 테스트되었으며 작동했습니다.
페르난도 곤잘레스 산체스

마침내 내 문제가 해결되었습니다. 프로젝트에 서비스 설치 프로그램을 추가하는 것을 잊었으며 설치 후 서비스를 제거 할 수 없습니다. 서비스 등록 트리를 내보내기 전에 내보내기를 수행하는 것이 좋습니다. 고마워요!
user3772108

2

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

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

1

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


1

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

매일 밤 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

내가 볼 수있는 것은 서비스가 마침내 통과 할 때까지 약 5 분 (!) 동안 삭제 표시되어 있다는 것입니다. 마지막으로 더 이상 수동 개입이 필요하지 않습니다. 나중에 스크립트를 확장하여 특정 시간 (예 : 30 분 후 알림) 후에 무언가가 발생하도록합니다.


1

이것은 나를 위해 일했다

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

그 결과가 표시 ReturnValue : 16되면 " 이 서비스는 시스템에서 제거되었습니다 "라는 명령으로 실패했습니다 . Microsoft의 ReturnValues ​​전체 목록은 여기
Signal15

1

서비스에서 서비스를 중지 할 수 없으면 작업 관리자 에서 Windows 서비스 실행을 중지 할 수 있습니다 . 그런 다음 서비스를 제거 할 수 있습니다.


0

서비스 목록을 새로 고치면 항상 나를 위해했습니다. 서비스 창이 열려 있으면 어떤 이유로 든 기존 메모리를 보유하게됩니다. F5 다시 설치하고 있습니다!


0

또한 실행중인 실행 파일의 인스턴스가 없는지 확인하십시오 (아마도 어떤 이유로 든 서비스와 독립적으로 실행 중일 수 있음).

MMC를 열고 닫고 죽일 PID를 찾고 있었지만 프로세스 탐색기를 살펴보면 잊혀진 스케줄 된 배치에서 실행되는 몇 가지 기존 프로세스가있었습니다. 그들을 죽였다. 작업이 완료되었습니다.


0

그 주제에 관한 많은 포럼 질문이 있습니다.

Windows API에서 답을 찾았습니다. 서비스를 제거한 후 컴퓨터를 다시 시작할 필요는 없습니다. 전화해야합니다 :

BOOL WINAPI CloseServiceHandle(
  SC_HANDLE hSCObject
);

서비스 핸들이 닫힙니다. Windows 7에서는 문제가 해결되었습니다. 나는한다:

  • 서비스 중지
  • 핸들 닫기
  • 서비스 제거
  • 3 초 기다립니다
  • 새 exe를 디렉토리에 복사
  • 서비스를 설치하다
  • 서비스를 시작하다
  • 핸들 닫기

2
열린 핸들이있는 프로그램에없는 경우 핸들을 어디에서 닫을 수 있습니까?
Matt

0

TopShelf가 엉망이되거나 다른 이유로 서비스가 실패 할 때 Octopus Deploy 인스턴스를 위해 몇 군데에서 다음 PowerShell을 함께 사용했습니다.

$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

0

또한 이것을 주목할 가치가 있습니다.

sc delete "ServiceName"

PowerShell에서 작동하지 않는 경우 sc는 PowerShell에서 cmdlet Set-Content의 별칭입니다. 해야 할 일 :

sc.exe delete "ServiceName"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.