Introducción a los servicios de Windows XP

Alguna vez nos hemos preguntado qué son los servicios de Windows, para qué sirven y qué es lo que hace cada uno de ellos. En este artículo nos introduciremos en su función y veremos cómo manejarlos tanto desde la interfaz gráfica como desde la línea de comandos y también aprenderemos los métodos existentes para añadir nuevos servicios.

¿Qué es un servicio?

Como puede leerse en la Ayuda de Windows: 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). Basta verlo en Inicio > Ejecutar y escribir

ms-its:%windir%\Help\glossary.chm::/glossary_per.htm#groupS

Podríamos decir que es un programa o aplicación que corre en segundo plano. Estos servicios se cargan al inicio y sin intervención del usuario, y obviamente, ocupan algo de la memoria y de los recursos del PC. Hay servicios nativos de XP, necesarios para que el sistema operativo funcione bien (desde muchos puntos de vista: Windows Update, dispositivos, redes, firewall, …), y otros que los instalan distintas aplicaciones de terceros. Un servicio puede depender de otro u otros con lo que deshabilitar alguno puede hacer que otros no funcionen bien. Por regla general no conviene tocar ni modificar los servicios de XP, y salvo contadas excepciones (como los de Windows Update que hay veces que no funcionan bien) no habría por qué tocarlos.

Una de las ventajas de que una aplicación funcione como un servicio es que por ejemplo, puede cargarse al inicio de Windows y sin que sea necesario ni siquiera iniciar ninguna sesión, esa aplicación puede ganar prioridad en el sistema, etc. Aunque como inconveniente quizá pues que “perdemos” el control de la aplicación cuando inicia como un servicio, e incluso que esto puede ser potencialmente peligroso si realmente no conocemos qué hace la aplicación (esto hablando de aplicaciones que podamos iniciar como servicio, no de los servicios de XP).

services.msc

Desde la GUI de Windows podemos controlar el funcionamiento e informarnos de los distintos servicios de XP, tanto de los del propio sistema operativo como de los de terceros. Además, el método es muy sencillo. Nos vamos a Inicio > Ejecutar y escribimos services.msc. Ahí veremos todos los servicios presentes en nuestra máquina, sea cual sea el estado de cada uno. Si elegimos uno de ellos y hacemos click con el botón derecho sobre él, y elegimos Propiedades, se nos abre una ventana con distintas opciones y pestañas. En la pestaña General, veremos el nombre del servicio, una pequeña descripción y el estado del mismo (iniciado, manual, deshabilitado). También veremos otra pestaña interesante que se llama Dependencias. En ellas podemos estudiar de qué servicios depende nuestro servicio, y por tanto, cómo podría afectar a otros servicios deshabilitarlo.

En la pestaña General ya mencionada podemos cambiar el estado de un servicio e iniciarlo o detenerlo.

La pestaña Iniciar sesión de services.msc

En esta pestaña podemos estavblcer en qué cuenta iniciará el servicio. Esta pestaña es muy importante y su mala configuración puede hacer que el servicio (o el sistema) no funcione adecuadamente. Igualmente puede deshabilitarse el servicio de algunos perfiles. Igualmente hay servicios que tienen que iniciar desde cuentas de sistema, no de usuarios. Por ejemplo, el servicio Cliente DNS tiene que iniciar desde NT AUTHORITY\NetworkService. El servicio Ayuda de NetBIOS sobre TCP/IP debe hacerlo desde NT AUTHORITY\LocalService. Estas cuentas son de sistema (repito, no de usuario) y deben dejarse tal cual configuradas para el correcto funcionamiento del sistema.
Sin embargo, la gran mayoría de los servicios se ejecutan el llamada  Cuenta del sistema local  (LocalSystem account). Esta cuenta está predefinida en el sistema local, y es una de las que tienen los más altos privilegios dentro del sistema local y no tiene contraseña. De ahí que un servicio corriendo en esta cuenta tiene acceso a todo el ordenador estemos en la cuenta que estemos (limitada o administrativa). Aunque no conviene tocar esto, es posible que algunos servicios no requieran tan altos privilegios.

Servicios desde la línea de comandos

Desde la línea de comandos podemos también gestionar los servicios. En este caso, vamos a describir cómo podemos iniciarlos, detenerlos y obtener información sobre el estado de cada uno.

Para iniciar un servicio, nos vamos a Inicio > Ejecutar y escribimos cmd. En la nueva pantalla escribimos net start nombre_del_servicio. Con eso lo iniciaremos. Por ejemplo, net start wuauserv, nos iniciará el servicio Actualizaciones automáticas (cuyo nombre interno de Windows es wuauserv).

Para detener un servicio, ejecutamos la orden net stop nombre_del­_servicio. Así, por ejemplo, net stop wuauserv detendrá el servicio Actualizaciones automáticas.

También podemos obtener en la ventana de comandos información sobre el estado de los servicios. Esto se hace con el comando sc query nombre_del_servicio­. Por ejemplo, si escribimos sc query wuauserv obtendremos algo como esto (si tenemos bien configurado el servicio):

Microsoft Windows XP [Versión 5.1.2600]

(C) Copyright 1985-2001 Microsoft Corp.

X:\Documents and Settings\[cuenta]>sc query wuauserv

 
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 : 0x0

 
Como vemos el servicio está Iniciado (“running”). Si estuviese detenido obtendríamos algo como "stopped”.

 

¿Cómo iniciar una aplicación como un servicio?

Basta seguir este artículo de la KB, y usar el comando sc create.

 
http://support.microsoft.com/?kbid=251192

 Veámoslo con detalle (el artículo de la KB traduce todo, hasta los parámetros de los comandos que no deberían traducirse). El comando sc create tiene la siguiente sintaxis:

 sc create [nombre_del_servicio] [ruta_del_ejecutable= ] <opciones>

 donde nombre_del_servicio es el nombre que queramos para nuestro servicio, y ruta_del_ejecutable es la ruta de la aplicación que queremos arranque como un servicio. Las opciones son las que aparecen en el artículo de la KB. Por ejemplo, para crear un servicio llamado “mi serv” y que ejecute a aplicación “mi app.exe” que está en la carpeta C:\mi carpeta, teclearíamos lo siguiente:

 
sc create “mi serv” binpath= c:\mi carpeta\mi app.exe”

 (recuérdese que las comillas en la ruta se colocan porque dicha ruta contiene espacios).

 Una vez creado, nos vamos a Inicio > Ejecutar y tecleamos services.msc. Localizamos “mi serv”, click derecho sobre él, elegimos Propiedades y podremos configurarlo.


Los servicios en el registro de Windows
Suele ser causa de mal funcionamiento de algunos servicios alguna corrupción en sus correspondientes claves del registro de Windows. En cada artículo correspondiente a cada registro se ha especificado cuál es la clave en la que está ubicado el registro, qué debe ser lo que tenga asignado el valor ImagePath y qué tiene que tener asignado el valor ServiceDll para aquellos servicios que lo tengan (es decir, servicios que tengan una dll asociada).
También es importante mirar algunos valores más en cada registro y que no se especifican en cada uno por ser el mismo para los servicios. Concretamente, si pinchamos sobre la clave del registro correspondiente a un servicio (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[nombre_servicio]) veremos que en el panel de la derecha nos salen, entre otros valores, el valor Start. Tiene que ser de tipo REG_DWORD y significa lo siguiente:

  • Start: indica el tipo de inicio del servicio: 2, para el inicio automático; 3, para el inicio manual; y 4 para que el servicio esté deshabilitado.
Top