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 |
|
MOF |
|
DLL |
|