Metodo StartService della classe Win32_Service (provider WMI CIMWin32)

Il metodo StartService tenta di posizionare il servizio di riferimento nello stato di avvio.

In questo argomento viene utilizzata la sintassi MOF (Managed Object Format). Per altre informazioni sull'uso di questo metodo, vedere Chiamata di un metodo.

Sintassi

uint32 StartService();

Parametri

Questo metodo non presenta parametri.

Valore restituito

Restituisce uno dei valori elencati nell'elenco seguente o qualsiasi altro valore per indicare un errore. Per altri codici di errore, vedere Costanti di errore WMI o WbemErrorEnum. Per i valori HRESULT generali, vedere Codici di errore di sistema.

0

La richiesta è stata accettata.

1

La richiesta non è supportata.

2

L'utente non ha ottenuto l'accesso necessario.

3

Impossibile arrestare il servizio perché altri servizi in esecuzione dipendono dal servizio.

4

Il codice di controllo richiesto non è valido o non è accettabile per il servizio.

5

Impossibile inviare il codice di controllo richiesto al servizio perché lo stato del servizio (Win32_BaseService.Proprietà state ) è uguale a 0, 1 o 2.

6

Il servizio non è stato avviato.

7

Il servizio non ha risposto in tempo utile alla richiesta di avvio.

8

Errore sconosciuto durante l'avvio del servizio.

9

Impossibile trovare il percorso della directory del file eseguibile del servizio.

10

Il servizio è già in esecuzione.

11

Il database a cui aggiungere il nuovo servizio è bloccato.

12

Una dipendenza da cui si basa questo servizio è stata rimossa dal sistema.

13

Impossibile trovare un servizio dipendente necessario.

14

Il servizio è stato disabilitato dal sistema.

15

Il servizio non dispone delle credenziali di autenticazione corrette per l'esecuzione nel sistema.

16

Questo servizio viene rimosso dal sistema.

17

Il servizio non ha thread di esecuzione.

18

Il servizio ha dipendenze circolari all'avvio.

19

Un servizio viene eseguito con lo stesso nome.

20

Il nome del servizio ha caratteri non validi.

21

I parametri non validi sono stati passati al servizio.

22

L'account con cui viene eseguito il servizio non è valido o non dispone delle autorizzazioni per l'esecuzione del servizio.

23

Il servizio esiste già nel database dei servizi disponibili dal sistema.

24

Il servizio è attualmente sospeso nel sistema.

Osservazioni:

Anche se potrebbe non esserci alcuna differenza pratica tra un servizio arrestato e un servizio sospeso, i due stati vengono visualizzati in modo diverso rispetto a SCM. Un servizio arrestato è un servizio che non è in esecuzione e deve eseguire l'intera procedura di avvio del servizio. Un servizio sospeso, tuttavia, è ancora in esecuzione, ma il funzionamento è sospeso. Per questo motivo, un servizio sospeso non deve eseguire l'intera procedura di avvio del servizio, ma richiede una procedura diversa per riprendere il funzionamento.

È necessario utilizzare il metodo appropriato per avviare un servizio arrestato o per riprendere un servizio sospeso. I metodi Win32_Service StartService e ResumeService devono essere usati nelle situazioni seguenti:

  • Se un servizio è attualmente arrestato, è necessario usare il metodo StartService per riavviarlo; ResumeService non può avviare un servizio attualmente arrestato.
  • Se un servizio è in pausa, è necessario usare ResumeService. Se si usa il metodo StartService in un servizio sospeso, viene visualizzato il messaggio "Il servizio è già in esecuzione". Tuttavia, il servizio rimane sospeso fino a quando non viene inviato il codice di controllo del servizio di ripresa.

Se si avvia un servizio arrestato che dipende da un altro servizio, entrambi i servizi vengono avviati. Quando un servizio viene avviato con questo metodo, tutti i servizi dipendenti non vengono avviati automaticamente. È necessario usare la classe di associazione Win32_DependentService e gli associatori di query per individuare i dipendenti e avviarli separatamente.

Esempi

Nell'esempio di codice VBSScript seguente viene illustrato come avviare un servizio specifico da istanze di 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

Nell'esempio di codice Perl seguente viene illustrato come avviare un servizio specifico da istanze di 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";
}

L'esempio di codice VBScript seguente, NetDDE, dipende dal servizio NetDDEDSDM. Lo script individua la classe da cui Dipende NetDDE e la avvia, che non avvia automaticamente 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

Requisiti

Requisito Valore
Client minimo supportato
Windows Vista
Server minimo supportato
Windows Server 2008
Spazio dei nomi
Root\CIMV2
MOF
CIMWin32.mof
DLL
CIMWin32.dll

Vedi anche

Classi del sistema operativo

Win32_service

Attività WMI: Servizi