Share via


Win32_Service 클래스의 StopService 메서드(Sdoias.h)

StopServiceWMI 클래스 메서드는 Win32_Service 개체가 나타내는 서비스를 중지된 상태로 배치합니다.

이 항목에서는 MOF(Managed Object Format) 구문을 사용합니다. 이 메서드를 사용하는 방법에 대한 자세한 내용은 메서드 호출을 참조 하세요.

구문

uint32 StopService();

매개 변수

이 메서드는 매개 변수가 없습니다.

반환 값

다음 목록에 나열된 값 중 하나 또는 오류를 나타내는 다른 값을 반환합니다. 추가 오류 코드는 WMI 오류 상수 또는 WbemErrorEnum을 참조하세요. 일반적인 HRESULT 값은 시스템 오류 코드를 참조 하세요.

0

요청이 수락되었습니다.

1

요청이 지원되지 않습니다.

2

사용자에게 필요한 액세스 권한이 없습니다.

3

실행 중인 다른 서비스가 종속되어 있으므로 서비스를 중지할 수 없습니다.

4

요청된 제어 코드가 유효하지 않거나 서비스에 허용되지 않습니다.

5

요청된 제어 코드는 서비스 상태(Win32_BaseService 때문에 서비스로 보낼 수 없습니다.State 속성)은 0, 1 또는 2와 같습니다.

6

서비스가 시작되지 않았습니다.

7

서비스가 적시에 시작 요청에 응답하지 않았습니다.

8

서비스를 시작할 때 알 수 없는 오류입니다.

9

서비스 실행 파일의 디렉터리 경로를 찾을 수 없습니다.

10

서비스가 이미 실행되고 있습니다.

11

새 서비스를 추가할 데이터베이스가 잠겨 있습니다.

12

이 서비스가 사용하는 종속성이 시스템에서 제거되었습니다.

13

서비스가 종속 서비스에서 필요한 서비스를 찾지 못했습니다.

14

시스템에서 서비스를 사용하지 않도록 설정했습니다.

15

서비스에 시스템에서 실행할 올바른 인증이 없습니다.

16

이 서비스는 시스템에서 제거되고 있습니다.

17

서비스에 실행 스레드가 없습니다.

18

서비스가 시작될 때 순환 종속성이 있습니다.

19

서비스가 동일한 이름으로 실행되고 있습니다.

20

서비스 이름에 잘못된 문자가 있습니다.

21

잘못된 매개 변수가 서비스에 전달되었습니다.

22

이 서비스가 실행되는 계정이 잘못되었거나 서비스를 실행할 수 있는 권한이 없습니다.

23

서비스는 시스템에서 사용할 수 있는 서비스 데이터베이스에 있습니다.

24

서비스가 현재 시스템에서 일시 중지되었습니다.

설명

중지하거나 일시 중지할 수 있는 서비스를 결정한 후에는 StopService PauseService 메서드를 사용하여 서비스를 중지하고 일시 중지할 수 있습니다. 서비스를 일시 중지하지 않고 중지하거나 그 반대의 경우도 마찬가지라는 결정은 다음을 비롯한 여러 요인에 따라 달라집니다.

  • 서비스를 일시 중지할 수 있나요? 그렇지 않은 경우 유일한 옵션은 서비스 중지입니다.
  • 서비스에 이미 연결된 모든 사용자에 대한 클라이언트 요청을 계속 처리해야 합니까? 이 경우 서비스를 일시 중지하면 일반적으로 새 클라이언트에 대한 액세스를 거부하면서 기존 클라이언트를 처리할 수 있습니다. 반대로 서비스를 중지하면 모든 클라이언트의 연결이 즉시 끊어집니다.
  • 서비스를 다시 구성하고 변경 내용을 즉시 적용해야 합니까? 서비스가 일시 중지되는 동안 서비스 속성을 변경할 수 있지만 서비스가 실제로 중지되고 다시 시작될 때까지는 대부분 적용되지 않습니다.

서비스를 중지하는 데 필요한 스크립팅 코드는 서비스를 일시 중지하는 데 필요한 코드와 거의 동일합니다.

종속 서비스가 실행 중인 서비스를 중지하려고 하면 StopService 메서드가 반환 값 3으로 실패합니다. 종속 서비스를 먼저 중지해야 합니다.

서비스를 중지하면 즉시 Win32_Service 검사.상태 속성은 값이 여전히 서비스를 실행 중으로 표시할 수 있으므로

예제

다음 VBScript 코드 샘플에서는 서비스를 종료하는 방법을 보여 줍니다.

Set ServiceSet = GetObject("winmgmts:").ExecQuery("select * from Win32_Service where Name='ClipSrv'")

for each Service in ServiceSet
 RetVal = Service.StopService()
 if RetVal = 0 then 
  WScript.Echo "Service stopped" 
 elseif RetVal = 5 then 
  WScript.Echo "Service already stopped" 
 end if
next

다음 Perl 코드 샘플에서는 서비스를 종료하는 방법을 보여 줍니다.

use strict;
use Win32::OLE;

my $ServiceSet;

eval { $ServiceSet = 
 Win32::OLE->GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2")->
 ExecQuery("SELECT * FROM Win32_Service WHERE Name='ClipSrv'"); };

if (!$@ && defined $ServiceSet)
{
 foreach my $ServiceInst (in $ServiceSet)
 {
  my $Result = $ServiceInst->StopService();
  if ($Result == 0)
  {
   print "\nService stopped\n";
  }
  elsif ($Result == 5) 
  {
   print "\nService already stopped\n";
  }
 }
}
else
{
 print STDERR Win32::OLE->LastError, "\n";
}

다음 VBScript 코드 예제에서는 종속 서비스가 중지될 때까지 NetDDE 서비스를 중지할 수 없음을 보여 줍니다. 스크립트를 실행하려면 Services.msc MMC 스냅인 또는 Net Start 명령을 사용하여 NetDDE 서비스 및 해당 종속 서비스가 실행되고 있는지 확인합니다.

Win32_DependentService 클래스를 사용하면 연결자 쿼리를 통해 서비스 종속성을 찾을 수 있습니다.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & _
    strComputer & "\root\cimv2")

Set objNetDDEservice = _
    objWMIService.Get("Win32_Service.Name='NetDDE'")

WScript.Echo "NetDDE service state: " & objNetDDEService.State
WScript.Echo "Stopping NetDDE service"
Return = objNetDDEService.StopService()
WScript.Echo "Return value: " & Return  & _
    "  Service cannot be stopped because " & _
    "dependent services are running"

Set colServiceList = objWMIService.ExecQuery("Associators of " _
    & "{Win32_Service.Name='NetDDE'} Where " _
        & "AssocClass=Win32_DependentService " & _
    "Role=Antecedent" )

For Each objService in colServiceList
   WScript.Echo "Dependent service: " & objService.Name & _
   "   State: " & objService.State
   WScript.Echo "Stopping dependent service " & objService.Name
   objService.StopService()    
Next

Wscript.Sleep 20000
WScript.Echo "Stopping NetDDE service"
Return = objNetDDEService.StopService()
WScript.Echo "Return value: " & Return

요구 사항

요구 사항
지원되는 최소 클라이언트
Windows Vista
지원되는 최소 서버
Windows Server 2008
네임스페이스
Root\CIMV2
헤더
Sdoias.h
MOF
CIMWin32.mof
DLL
CIMWin32.dll

참고 항목

운영 체제 클래스

Win32_Service

WMI 작업: 서비스

PauseService