Alguna vez nos hemos preguntado qué son los servicios de Windows, para qué sirven y qué hace cada uno de ellos. En este artículo veremos su función, cómo manejarlos tanto desde la interfaz gráfica como desde la línea de comandos y cómo añadir nuevos servicios. Aunque está escrito pensando en Windows XP, casi todo sigue siendo válido en Windows 10 y 11.
¿Qué es un servicio?
La Ayuda de Windows lo define como un programa, rutina o proceso que realiza una determinada función del sistema para ofrecer compatibilidad con otros programas, especialmente a bajo nivel (cerca del hardware).
Dicho de forma sencilla, es un programa que corre en segundo plano, sin ventana y sin intervención del usuario. Los servicios con inicio automático se cargan al arrancar Windows, incluso antes de que nadie inicie sesión, y ocupan algo de memoria y recursos. Hay servicios propios de XP, necesarios para que el sistema funcione bien (Windows Update, dispositivos, redes, firewall…), y otros que instalan las aplicaciones de terceros.
Un servicio puede depender de otros, así que deshabilitar uno puede hacer que otros dejen de funcionar. Por regla general no conviene tocar los servicios de Windows, y salvo contadas excepciones (como los de Windows Update cuando se atascan) no hay por qué hacerlo.
La ventaja de que una aplicación funcione como servicio es que puede arrancar con Windows sin que nadie inicie sesión y seguir funcionando aunque se cierre la sesión. El inconveniente es que «perdemos» el control visible de la aplicación, y eso puede ser peligroso si no sabemos bien qué hace (hablamos de aplicaciones de terceros, no de los servicios del sistema).
La consola de servicios: services.msc
Desde la interfaz gráfica podemos consultar y controlar todos los servicios, tanto los del sistema como los de terceros. Vamos a Inicio > Ejecutar y escribimos services.msc. Veremos todos los servicios del equipo con su estado y su tipo de inicio. Haciendo clic derecho sobre uno y eligiendo Propiedades se abre una ventana con varias pestañas:
- General: muestra el nombre del servicio, el nombre para mostrar, la descripción, la ruta del ejecutable, el tipo de inicio (Automático, Manual o Deshabilitado) y el estado actual (iniciado o detenido). Desde aquí se puede cambiar el tipo de inicio e iniciar, detener, pausar o reanudar el servicio.
- Iniciar sesión: la cuenta con la que se ejecuta el servicio. La vemos en detalle más abajo.
- Recuperación: qué hace Windows si el servicio falla (reiniciarlo, ejecutar un programa o reiniciar el equipo).
- Dependencias: muestra de qué servicios depende este y qué servicios dependen de él. Es la pestaña que hay que mirar antes de deshabilitar nada.
La pestaña Iniciar sesión
En esta pestaña se establece con qué cuenta se ejecuta el servicio. Es muy importante: una mala configuración puede hacer que el servicio, o el propio sistema, no funcione bien. En XP también permite habilitar o deshabilitar el servicio para cada perfil de hardware.
Los servicios de Windows usan principalmente tres cuentas de sistema (no de usuario), y deben dejarse tal como vienen:
- Sistema local (LocalSystem): la que usan la mayoría de servicios. Tiene los privilegios más altos del equipo y no tiene contraseña, así que un servicio que corre con ella tiene acceso a todo el ordenador, sea cual sea la cuenta (limitada o de administrador) con la que hayamos iniciado sesión.
- Servicio local (NT AUTHORITY\LocalService): privilegios reducidos y acceso a la red como usuario anónimo. Por ejemplo, el servicio Ayuda de NetBIOS sobre TCP/IP.
- Servicio de red (NT AUTHORITY\NetworkService): privilegios reducidos, pero accede a la red con la identidad del equipo. Por ejemplo, el servicio Cliente DNS.
Servicios desde la línea de comandos
Los servicios también se pueden gestionar desde la consola. Vamos a Inicio > Ejecutar, escribimos cmd y usamos estos comandos (el nombre que piden es el nombre interno del servicio, no el que aparece en services.msc):
- Iniciar un servicio: net start nombre_del_servicio. Por ejemplo, net start wuauserv inicia Actualizaciones automáticas, cuyo nombre interno es wuauserv.
- Detener un servicio: net stop nombre_del_servicio. Por ejemplo, net stop wuauserv.
- Ver los servicios en ejecución: net start, sin parámetros.
- Consultar el estado: sc query nombre_del_servicio.
- Cambiar el tipo de inicio: sc config nombre_del_servicio start= demand (Manual), start= auto (Automático) o start= disabled (Deshabilitado). El espacio después del signo igual es obligatorio.
Por ejemplo, sc query wuauserv devuelve algo así cuando el servicio está funcionando:
SERVICE_NAME: wuauserv
TYPE: 20 WIN32_SHARE_PROCESS
STATE: 4 RUNNING
(STOPPABLE,NOT_PAUSABLE,ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE: 0 (0x0)
SERVICE_EXIT_CODE: 0 (0x0)
CHECKPOINT: 0x0
WAIT_HINT: 0x0El campo STATE indica que el servicio está iniciado (RUNNING). Si estuviese detenido veríamos 1 STOPPED.
¿Cómo crear un servicio nuevo?
Para registrar un servicio se usa el comando sc create, con esta sintaxis:
sc create nombre_del_servicio binPath= "ruta_del_ejecutable" [opciones]Por ejemplo, para crear un servicio llamado «mi serv» que ejecute C:\mi carpeta\mi app.exe:
sc create "mi serv" binPath= "\"C:\mi carpeta\mi app.exe\"" start= demandHay que fijarse en tres detalles:
- El espacio tras el igual: después de binPath= y de start= tiene que haber un espacio, o el comando falla.
- Las comillas escapadas: si la ruta tiene espacios, va entre comillas escapadas con \". Así se guarda entrecomillada en el registro; una ruta con espacios sin comillas es un fallo de seguridad conocido.
- No vale cualquier programa: el ejecutable tiene que estar programado como servicio. Un.exe normal arrancará, pero no responderá al administrador de servicios y Windows lo dará por fallido al cabo de unos 30 segundos (error 1053). Para ejecutar como servicio una aplicación normal, en XP se usaba srvany.exe del Windows Resource Kit; hoy la alternativa habitual es NSSM.
Una vez creado, aparecerá en services.msc, donde podremos configurarlo como cualquier otro. Para eliminarlo: sc delete "mi serv".
Los servicios en el registro de Windows
Una causa frecuente de mal funcionamiento de un servicio es que sus claves del registro estén dañadas. Cada servicio tiene su clave en HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\nombre_del_servicio. En los artículos de cada servicio indicamos qué debe contener el valor ImagePath y, en los servicios que cargan una DLL, el valor ServiceDll (dentro de la subclave Parameters).
Hay otros valores comunes a todos los servicios que conviene revisar:
- Start (REG_DWORD), tipo de inicio:
- 0 y 1: arranque y sistema; solo los usan los controladores.
- 2: automático.
- 3: manual.
- 4: deshabilitado.
- ObjectName (REG_SZ): la cuenta con la que inicia el servicio, la misma que aparece en la pestaña Iniciar sesión.
- DependOnService (REG_MULTI_SZ): los servicios de los que depende.
En Windows Vista y posteriores existe además el valor DelayedAutostart: si vale 1 junto con Start = 2, el inicio es «Automático (inicio retrasado)».