jueves, 3 de febrero de 2011

Arrancar y detener servicios de Windows con C#

Mediante el uso de la clase ServiceController se puede obtener control sobre un servicio de Windows instalado en el equipo. Esta clase permite comprobar si un servicio está instalado, en qué estado se encuentra (parado, en marcha, etc), y realizar acciones sobre él como pararlo, arrancarlo o mandarle comandos.


Vemos los pasos a realizar:
  • Añadir la referencia System.ServiceProcess al proyecto
  • Crear el objeto ServiceController capturando el servicio deseado
  • Comprobar el estado: ¿Existe el servicio? ¿Está parado/arrancado?
  • Realizar acción sobre el servicio: Parar/Arrancar
  • Esperar el resultado y cerrar el objeto ServiceController

Vemos un ejemplo de cómo detener un servicio:



Vemos ahora un ejemplo de cómo iniciar un servicio:



Comentarios:

Analizando un poco el código de estos dos ejemplos, podemos realizar las siguientes observaciones:
  • Se crea el objeto de control pasandole el nombre del servicio con el que queremos operar
  • Se comprueba el estado del servicio (si se pudo cargar, está parado, etc)
  • Se arranca o para el servicio
  • Se espera a que esté arrancado o parado
  • Se cierra el objeto de control
Tener en cuenta que existen también las funciones y opciones para pausar (Pause) y rearrancar (Continue) servicios, así como para ejecutar comandos (ExecuteCommand) y algunas otras operaciones.
Ver la documentación de la clase ServiceController en la web MSDN

12 comentarios:

  1. Respuestas
    1. Claro que sirve, aunque seguramente no para lo que usted quiere. Tenga en cuenta que cuando se escribió este post el estándar era Windows XP y .NET Framework 2.0. Saludos.

      Eliminar
    2. Si sirve , en Windows 10 y .NET Framework 4.6. Saludos

      Eliminar
  2. que permisos debe tener el usuario para que pueda ejecutar este codigo en un servidor?

    ResponderEliminar
    Respuestas
    1. Se necesitan permisos de administración, aunque según el caso podría usarse una cuenta de sistema/servicio, aunque esto dependerá de la política de seguridad aplicada en el servidor.

      Eliminar
  3. me aparece lo siguiente, No se puede abrir el servicio en el equipo '.'.

    ResponderEliminar
  4. Funciona perfecto. Con tecnología al 2019. C#. Windows 10. Visual Studio 2019.

    ResponderEliminar
  5. hola bro gracias pero una consulta este codigo podra detener el servicio de los AV ?

    ResponderEliminar