Compartir a través de


Método StopService de la clase Win32_Service (Sdoias.h)

El método de clase WMIStopService coloca el servicio, representado por el objeto Win32_Service, en estado detenido.

En este tema se usa la sintaxis de Managed Object Format (MOF). Para obtener más información sobre el uso de este método, vea Llamar a un método.

Sintaxis

uint32 StopService();

Parámetros

Este método no tiene parámetros.

Valor devuelto

Devuelve uno de los valores enumerados en la lista siguiente o cualquier otro valor para indicar un error. Para obtener códigos de error adicionales, consulte Constantes de error WMI o WbemErrorEnum. Para obtener valores HRESULT generales, consulte Códigos de error del sistema.

0

Se aceptó la solicitud.

1

No se admite la solicitud.

2

El usuario no tenía el acceso necesario.

3

No se puede detener el servicio porque otros servicios que se están ejecutando dependen de él.

4

El código de control solicitado no es válido o no es aceptable para el servicio.

5

El código de control solicitado no se puede enviar al servicio porque el estado del servicio (Win32_BaseService. Propiedad de estado ) es igual a 0, 1 o 2.

6

El servicio no se ha iniciado.

7

El servicio no respondió a tiempo a la solicitud de inicio.

8

Error desconocido al iniciar el servicio.

9

No se encontró la ruta de acceso del directorio al archivo ejecutable del servicio.

10

El servicio ya se está ejecutando.

11

La base de datos para agregar un nuevo servicio está bloqueada.

12

Una dependencia en la que se basa este servicio se ha quitado del sistema.

13

El servicio no pudo encontrar el servicio necesario de un servicio dependiente.

14

El servicio se ha deshabilitado del sistema.

15

El servicio no tiene la autenticación correcta para ejecutarse en el sistema.

16

Este servicio se está quitando del sistema.

17

El servicio no tiene ningún subproceso de ejecución.

18

El servicio tiene dependencias circulares cuando se inicia.

19

Un servicio se ejecuta con el mismo nombre.

20

El nombre del servicio tiene caracteres no válidos.

21

Se han pasado parámetros no válidos al servicio.

22

La cuenta con la que se ejecuta este servicio no es válida o carece de los permisos para ejecutar el servicio.

23

El servicio existe en la base de datos de servicios disponibles del sistema.

24

El servicio se encuentra en pausa actualmente en el sistema.

Comentarios

Después de determinar qué servicios se pueden detener o pausar, puede usar los métodos StopService y PauseService para detener y pausar los servicios. La decisión de detener un servicio en lugar de pausarlo, o viceversa, depende de varios factores, incluidos los siguientes:

  • ¿Es capaz de pausar el servicio? Si no es así, la única opción es detener el servicio.
  • ¿Necesita seguir controlando las solicitudes de cliente para cualquier persona que ya esté conectada al servicio? Si es así, pausar un servicio normalmente permite controlar los clientes existentes a la vez que se deniega el acceso a los nuevos clientes. Por el contrario, al detener un servicio, todos los clientes se desconectan inmediatamente.
  • ¿Necesita volver a configurar un servicio y hacer que los cambios surtan efecto inmediatamente? Aunque las propiedades del servicio se pueden cambiar mientras un servicio está en pausa, la mayoría de ellas no surten efecto hasta que el servicio se detenga y reinicie realmente.

El código de scripting necesario para detener un servicio es casi idéntico al código necesario para pausar el servicio.

Si intenta detener un servicio que tiene servicios dependientes en ejecución, se produce un error en el método StopService con un valor devuelto de 3. Los servicios dependientes deben detenerse primero.

Si detiene un servicio, compruebe inmediatamente el Win32_Service. Propiedad state , ya que el valor todavía puede mostrar el servicio como en ejecución.

Ejemplos

Set-RemoteService Ejemplo de PowerShell Establece el estado del servicio para las máquinas remotas.

El ejemplo Stop a Service and Its Dependents VBScript detiene un servicio y todos los servicios dependientes.

En el ejemplo de código de VBScript siguiente se muestra cómo apagar un servicio.

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

En el ejemplo de código Perl siguiente se muestra cómo apagar un servicio.

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

En el siguiente ejemplo de código vbScript se muestra que no se puede detener el servicio NetDDE hasta que se hayan detenido los servicios dependientes. Para ejecutar el script, asegúrese de que el servicio NetDDE y sus servicios dependientes se ejecutan mediante el complemento MMC Services.msc o el comando Net Start .

La clase Win32_DependentService permite buscar dependencias de servicio a través de una consulta Asociadores 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 Value
Cliente mínimo compatible
Windows Vista
Servidor mínimo compatible
Windows Server 2008
Espacio de nombres
Root\CIMV2
Encabezado
Sdoias.h
MOF
CIMWin32.mof
Archivo DLL
CIMWin32.dll

Consulte también

Clases de sistema operativo

Win32_Service

Tareas de WMI: servicios

PauseService