Metodo StopService della classe Win32_Service (Sdoias.h)
Il metodo della classe WMI StopServiceinserisce il servizio, rappresentato dall'oggetto Win32_Service, nello stato arrestato.
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 StopService();
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:
Dopo aver determinato quali servizi possono essere arrestati o sospesi, è possibile usare i metodi StopService e PauseService per arrestare e sospendere i servizi. La decisione di arrestare un servizio anziché sospenderla o viceversa dipende da diversi fattori, tra cui i seguenti:
- Il servizio è in grado di essere sospeso? In caso contrario, l'unica opzione è arrestare il servizio.
- È necessario continuare a gestire le richieste client per chiunque sia già connesso al servizio? In tal caso, la sospensione di un servizio consente in genere di gestire i client esistenti negando l'accesso ai nuovi client. Al contrario, quando si arresta un servizio, tutti i client vengono immediatamente disconnessi.
- È necessario riconfigurare un servizio e rendere immediatamente effettive le modifiche? Anche se le proprietà del servizio possono essere modificate durante la sospensione di un servizio, la maggior parte di esse non diventa effettiva finché il servizio non viene effettivamente arrestato e riavviato.
Il codice di scripting necessario per arrestare un servizio è quasi identico al codice necessario per sospendere il servizio.
Se si tenta di arrestare un servizio con servizi dipendenti in esecuzione, il metodo StopService ha esito negativo con un valore restituito pari a 3. I servizi dipendenti devono essere arrestati per primi.
Se si arresta un servizio, controllare immediatamente il Win32_Service.Proprietà State , perché il valore può comunque mostrare il servizio come in esecuzione.
Esempi
Nell'esempio di codice VBScript seguente viene illustrato come arrestare un servizio.
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
Nell'esempio di codice Perl seguente viene illustrato come arrestare un servizio.
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";
}
L'esempio di codice VBScript seguente mostra che non è possibile arrestare il servizio NetDDE fino a quando i servizi dipendenti non sono stati arrestati. Per eseguire lo script, assicurarsi che il servizio NetDDE e i relativi servizi dipendenti siano in esecuzione usando lo snap-in MMC Services.msc o il comando Net Start .
La classe Win32_DependentService consente di individuare le dipendenze del servizio tramite una query Associators Of .
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
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato |
Windows Vista |
Server minimo supportato |
Windows Server 2008 |
Spazio dei nomi |
Root\CIMV2 |
Intestazione |
|
MOF |
|
DLL |
|