|
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.
Trackback(0)
 |
En primer lugar felicitarlos por el foro, y por encontrar personas con tan amplios conocimentos...
Podria alguien colaborarme, es que tengo una impresora en red y cada vez que alguien envia una impresion hay que reiniciar el servicio de cola de impresion manualmente, intente tomar el control desde otro equipo por medio de este comando:
net print (servidor)(Impresora)/restart... Pero no funciona igual hay que ir al pc donde esta conectada la impresora y hacerlo manualmente... Como podria solucionar este problema..?
Gracias de antemano....