Método StartService da classe Win32_Service (Provedores WMI CIMWin32)

O método StartService tenta colocar o serviço referenciado em seu estado de inicialização.

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 StartService();

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

Embora possa parecer não haver diferença prática entre um serviço parado e um serviço pausado, os dois estados aparecem de forma diferente para o SCM. Um serviço parado é um serviço que não está em execução e deve passar por todo o procedimento de início do serviço. Um serviço em pausa, no entanto, ainda está em execução, mas teve seu funcionamento suspenso. Por isso, um serviço em pausa não precisa passar por todo o procedimento de início do serviço, mas precisa de um procedimento diferente para retomar o funcionamento.

Você deve usar o método adequado para iniciar um serviço que foi interrompido ou retomar um serviço que foi pausado. Os métodos Win32_ServiceStartService e ResumeService devem ser usados nas seguintes situações:

  • Se um serviço estiver parado no momento, você deverá usar o método StartService para reiniciá-lo; ResumeService não pode iniciar um serviço que está parado no momento.
  • Se um serviço estiver em pausa, você deverá usar ResumeService. Se você usar o método StartService em um serviço em pausa, receberá a mensagem "O serviço já está em execução". No entanto, o serviço permanece em pausa até que o código de controle de serviço de retomada seja enviado a ele.

Se você iniciar um serviço interrompido que depende de outro serviço, ambos os serviços serão iniciados. Quando um serviço é iniciado com esse método, todos os serviços dependentes não são iniciados automaticamente. Você deve usar a classe de associação Win32_DependentService e os Associadores de consulta para localizar os dependentes e iniciá-los separadamente.

Exemplos

O exemplo habilitar remotamente o PowerShell rdp habilita remotamente o serviço de Área de Trabalho Remota.

O exemplo Parar, Iniciar, Habilitar ou Desabilitar Serviço do PowerShell inicia, para, habilita ou desabilita um serviço.

O exemplo de código VBSScript a seguir demonstra como iniciar um serviço específico de instâncias de Win32_Service.

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

for each Service in ServiceSet
 RetVal = Service.StartService()
 if RetVal = 0 then WScript.Echo "Service started"
 if RetVal = 10 then WScript.Echo "Service already running"
next

O exemplo de código Perl a seguir demonstra como iniciar um serviço específico de instâncias de Win32_Service.

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 $service (in $ServiceSet)
 {
  my $Result = $service->StartService();
  if ($Result == 0) 
  {
   print "\nService started\n";
  }
  elsif ($Result == 10)
  {
   print "\nService already running\n";
  }
 }
}
else
{
 print STDERR Win32::OLE->LastError, "\n";
}

O exemplo de código VBScript a seguir, NetDDE, depende do serviço NetDDEDSDM. O script localiza a classe na qual o NetDDE depende e o inicia, que não inicia automaticamente o NetDDE.

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

' Stop NetDDE if it is running
Set objNetDDEService = objWMIService.Get("Win32_Service.Name='NetDDE'")
Return = objNetDDEService.StopService()

' NetDDE is in the dependent role to another service
Set colServiceList = objWMIService.ExecQuery("Associators of " _
    & "{Win32_Service.Name='NetDDE'} Where " & "AssocClass=Win32_DependentService " & "Role=Dependent" )

' start the service on which NetDDE is dependent
For Each objService in colServiceList
    WScript.Echo "Starting " & objService.Name
    Return = objService.StartService()
    If Return = 0 Then
        WScript.Echo "Parent service " & objService.Name & " started successfully"
    Else
        WScript.Echo "Parent service " & objService.Name & " did not start. Return = " & Return
    End If
Next

' NetDDE is still stopped
Set objNetDDEService = _
    objWMIService.Get("Win32_Service.Name='NetDDE'")
WScript.Echo "Dependent NetDDE service is " & objNetDDEService.State

Requisitos

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

Confira também

Classes do sistema operacional

Win32_Service

Tarefas do WMI: Serviços