Compartilhar via


Método StopService da classe Win32_Service (Sdoias.h)

O método de classe WMIStopService coloca o serviço, representado pelo objeto Win32_Service, no estado parado.

Este tópico usa a sintaxe MOF (Managed Object Format). Para obter mais informações sobre como usar esse método, consulte Chamando um método.

Sintaxe

uint32 StopService();

Parâmetros

Esse método não tem parâmetros.

Valor retornado

Retorna um dos valores listados na lista a seguir ou qualquer outro valor para indicar um erro. Para obter códigos de erro adicionais, consulte Constantes de erro WMI ou WbemErrorEnum. Para obter valores gerais de HRESULT , consulte Códigos de erro do sistema.

0

A solicitação foi aceita.

1

A solicitação não terá suporte.

2

O usuário não tinha o acesso necessário.

3

O serviço não pode ser interrompido, porque outros serviços em execução dependem dele.

4

O código de controle pedido não é válido ou é inaceitável para o serviço.

5

O código de controle solicitado não pode ser enviado ao serviço porque o estado do serviço (Win32_BaseService. Propriedade State ) é igual a 0, 1 ou 2.

6

O serviço não foi iniciado.

7

O serviço não respondeu à solicitação de início em um tempo oportuno.

8

Falha desconhecida ao iniciar o serviço.

9

O caminho do diretório para o arquivo executável do serviço não foi encontrado.

10

O serviço já está em execução.

11

O banco de dados para adicionar um serviço novo está bloqueado.

12

Uma dependência em que esse serviço depende foi removida do sistema.

13

O serviço não localizou o serviço necessário em um serviço dependente.

14

O serviço foi desabilitado do sistema.

15

O serviço não tem a autenticação correta para ser executado no sistema.

16

Esse serviço está sendo removido do sistema.

17

O serviço não tem thread de execução.

18

O serviço tem dependências circulares quando é iniciado.

19

Um serviço está em execução com o mesmo nome.

20

O nome do serviço tem caracteres inválidos.

21

Parâmetros inválidos foram passados para o serviço.

22

A conta sob a qual esse serviço é executado é inválida ou não tem as permissões para executar o serviço.

23

O serviço existe no banco de dados de serviços disponível no sistema.

24

O serviço está pausado atualmente no sistema.

Comentários

Depois de determinar quais serviços podem ser interrompidos ou pausados, você pode usar os métodos StopService e PauseService para interromper e pausar serviços. A decisão de interromper um serviço em vez de pausar, ou vice-versa, depende de vários fatores, incluindo o seguinte:

  • O serviço é capaz de ser pausado? Caso contrário, sua única opção é interromper o serviço.
  • Você precisa continuar tratando solicitações de cliente para qualquer pessoa já conectada ao serviço? Nesse caso, pausar um serviço normalmente permite que ele manipule os clientes existentes, negando o acesso a novos clientes. Por outro lado, quando você interrompe um serviço, todos os clientes são desconectados imediatamente.
  • Você precisa reconfigurar um serviço e fazer com que as alterações entrem em vigor imediatamente? Embora as propriedades de serviço possam ser alteradas enquanto um serviço estiver em pausa, a maioria delas não terá efeito até que o serviço seja realmente interrompido e reiniciado.

O código de script necessário para interromper um serviço é quase idêntico ao código necessário para pausar o serviço.

Se você tentar interromper um serviço que tem serviços dependentes em execução, o método StopService falhará com um valor retornado de 3. Os serviços dependentes devem ser interrompidos primeiro.

Se você parar um serviço, marcar imediatamente o Win32_Service. Propriedade State, pois o valor ainda pode mostrar o serviço como em execução.

Exemplos

O Set-RemoteService Exemplo do PowerShell Define o estado do serviço para computadores remotos.

O exemplo Parar um Serviço e seus Dependentes VBScript interrompe um serviço e todos os serviços dependentes.

O exemplo de código VBScript a seguir demonstra como desligar um serviço.

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

O exemplo de código Perl a seguir demonstra como desligar um serviço.

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";
}

O exemplo de código VBScript a seguir mostra que você não pode interromper o serviço NetDDE até que os serviços dependentes sejam interrompidos. Para executar o script, verifique se o serviço NetDDE e seus serviços dependentes estão em execução usando o snap-in do MMC Services.msc ou o comando Net Start .

A classe Win32_DependentService permite localizar dependências de serviço por meio de uma consulta Associadores de .

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

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows Vista
Servidor mínimo com suporte
Windows Server 2008
Namespace
Root\CIMV2
Cabeçalho
Sdoias.h
MOF
CIMWin32.mof
DLL
CIMWin32.dll

Confira também

Classes do sistema operacional

Win32_Service

Tarefas do WMI: Serviços

PauseService