Como crear un servicio windows

Cómo crear un servicio de Windows usando Sc.exe

Para crear e iniciar un servicio de forma remota desde la línea de comandos, puede utilizar la herramienta SC (Sc.exe) incluida en el Kit de recursos.
Si bien puede utilizar las herramientas Netsvc.exe e Instsrv.exe para iniciar un servicio en un equipo remoto, estas herramientas no le ofrecen la posibilidad de crear un servicio de manera remota.
NOTA: la herramienta Srvinstw.exe es la versión de interfaz gráfica de usuario (GUI) utilizada para crear servicios remotos. Srvinstw.exe no es una herramienta de línea de comandos.

Volver al principio

Más información

Puede utilizar Sc.exe como ayuda para desarrollar servicios para Windows. Sc.exe, que se incluye en el Kit de recursos, implementa llamadas a todas las funciones de la interfaz de programación de aplicaciones (API) de control de servicios de Windows. Puede establecer los parámetros de estas funciones si los especifica en la línea de comandos. Sc.exe también muestra el estado de los servicios y recupera los valores almacenados en los campos de estructura de estado. Asimismo, la herramienta le permite especificar el nombre de un equipo remoto de forma que pueda llamar a las funciones de API de los servicios o ver las estructuras de estado de servicio en el equipo remoto.
Sc.exe también le permite llamar a cualquiera de las funciones de API de control de servicios y modificar cualquier parámetro desde la línea de comandos. La ventaja de ello es que ofrece una forma cómoda de crear o configurar la información de servicios en el Registro y en la base de datos del Administrador de control de servicios. No es necesario configurar el servicio creando manualmente entradas en el Registro y reiniciando después el equipo para forzar que el Administrador de control de servicios actualice su base de datos.
Sc.exe utiliza la sintaxis siguiente:
Sintaxis1 (utilice Sintaxis1 para ejecutar Sc.exe)

sc [nombreDeServidor] Comando nombreDeServicio [nombreDeOpción = valorDeOpción...]

Sintaxis2 (utilice Sintaxis2 para mostrar información de Ayuda, excepto para el comando query)

sc [Comando]

Volver al principio

Parámetros


nombreDeServidor
Opcional. Especifica el nombre del servidor cuando desea ejecutar los comandos en un equipo remoto. El nombre debe empezar con dos caracteres de barra diagonal inversa (\) (por ejemplo, \\miServidor). Para ejecutar Sc.exe en el equipo local, no suministre este parámetro.


Comando
Especifica el comando sc. Tenga en cuenta que muchos de los comandos sc requieren tener privilegios administrativos en el equipo especificado. Sc.exe acepta los comandos siguientes:

Config
Cambia la configuración de un servicio (persistente).
Continue
Envía una solicitud de control de continuar a un servicio.
Control
Envía un control a un servicio.
Create
Crea un servicio (lo agrega al Registro).
Delete
Elimina un servicio (del Registro).
EnumDepend
Enumera dependencias de servicios.
GetDisplayName
Obtiene el nombre para mostrar de un servicio.
GetKeyName
Obtiene el nombre de clave de un servicio.
Interrogate
Envía una solicitud de control de interrogar a un servicio.
Pause
Envía una solicitud de control de pausa a un servicio.
qc
Consulta la configuración del servicio. Para obtener información detallada al respecto, consulte la sección de referencia, "SC QC".
Query
Consulta el estado de un servicio o enumera el estado de los tipos de servicios. Para obtener información detallada al respecto, consulte la sección de referencia, "SC QUERY".
Start
Inicia un servicio.
Stop
Envía una solicitud de control de detención a un servicio.


nombreDeServicio
Especifica el nombre asignado a la clave Service en el Registro. Tenga en cuenta que es distinto que el nombre para mostrar (que es lo que ve con el comando net start y con la herramienta Servicios del Panel de control. Sc.exe utiliza el nombre de clave del servicio como identificador principal del servicio.


nombreDeOpción
Los parámetros nombreDeOpción y valorDeOpción le permiten especificar los nombres y los valores de los parámetros de comandos opcionales. Tenga en cuenta que no hay ningún espacio en blanco entre nombreDeOpción y el signo igual. Puede suministrar ninguno, uno o más pares de nombre y valor de parámetro.


valorDeOpción
Especifica el valor del parámetro indicado por nombreDeOpción. El intervalo de valores válidos suele estar restringido para cada nombreDeOpción. Para ver una lista de los valores disponibles, solicite Ayuda para cada comando.

Muchos de los comandos requieren tener privilegios de Administrador. Asegúrese de que es un administrador del equipo donde se está llevando a cabo el desarrollo.
El comando sc create crea una entrada para el servicio en el Registro y en la base de datos del Administrador de control de servicios.
Sintaxis

sc [nombreDeServidor] create nombreDeServicio [nombreDeOpción=valorDeOpción...

Volver al principio

Parámetros


nombreDeServidor
Opcional. Especifica el nombre del servidor cuando desea ejecutar los comandos en un equipo remoto. El nombre debe empezar con dos caracteres de barra diagonal inversa (por ejemplo, \\miServidor). Para ejecutar SC en el equipo local, no suministre este parámetro.


nombreDeServicio
Especifica el nombre asignado a la clave del servicio en el Registro. Tenga en cuenta que es distinto que el nombre para mostrar (que es lo que ve con net start y con la herramienta Servicios del Panel de control. Sc.exe utiliza el nombre de clave del servicio como identificador principal del servicio.


nombreDeOpción
Los parámetros nombreDeOpción y valorDeOpción le permiten especificar los nombres y los valores de los parámetros opcionales. Tenga en cuenta que no hay ningún espacio en blanco entre nombreDeOpción y el signo igual. Puede suministrar ninguno, uno o más pares de nombre y valor de parámetro. El comando sc query acepta los valores siguientes:nombreDeOpciónvalorDeOpción

type=own, share, interact, kernel, filesys
Tipo de servicio que desea crear. Entre los valores de opción se incluyen los tipos utilizados por los controladores.
(valor predeterminado = share)
start=boot, system, auto, demand, disabled
Tipo de inicio del servicio. Entre los valores de opción se incluyen los tipos utilizados por los controladores.
(valor predeterminado = demand)
error=normal, severe, critical, ignore
Gravedad del error si el servicio no se inicia al iniciar el equipo.
(valor predeterminado = normal)
binPath=(cadena)
Nombre de ruta de acceso al archivo binario del servicio. No hay ningún valor predeterminado para este parámetro. Se debe suministrar esta cadena.
group=(cadena)
Nombre del grupo del que es miembro este servicio. La lista de grupos se almacena en el Registro bajo ServiceGroupOrder.
(valor predeterminado = nothing)
tag=(cadena)
Si esta cadena se establece en "yes", Sc.exe obtiene un TagId de la llamada a CreateService; sin embargo, Sc.exe no muestra la etiqueta.
(valor predeterminado = nothing)
depend=(cadena separada por espacios)
Nombres de los servicios o los grupos que deben iniciarse antes que este servicio.
obj=(cadena)
Nombre de la cuenta en la que se ejecuta el servicio. Para los controladores, es el nombre de objeto del controlador de Windows.
(valor predeterminado = LocalSystem)
DisplayName=(cadena)
Una cadena que los programas de interfaz de usuario pueden utilizar para identificar el servicio.
password=(cadena)
Una cadena de contraseña. Es necesario si se utiliza una cuenta distinta de LocalSystem.

valorDeOpción
Especifica el valor del parámetro indicado por nombreDeOpción. Consulte la referencia de nombreDeOpción para ver una lista de los valores aceptados. Cuando se va a introducir una cadena, el uso de comillas vacías significa que se va a pasar una cadena vacía.
NOTA: El comando sc create realiza las operaciones de la función de API CreateService.
En el ejemplo siguiente se crea una entrada del Registro para el servicio denominado "NuevoServicio" en el equipo \\equipoRemoto:

sc \\equipoRemoto create nuevoServicio binpath= c:\nt\system32\newserv.exe

Este servicio se crea como un WIN32_SHARE_PROCESS con un tipo de inicio SERVICE_DEMAND_START de manera predeterminada. No tiene ninguna dependencia y se ejecuta en el contexto de seguridad LocalSystem.
En el ejemplo siguiente se crea el servicio en el equipo local como un servicio de inicio automático que se ejecuta en su propio proceso. Tiene dependencias en el grupo TDI y en el servicio NetBIOS. Tenga en cuenta que debe agregar comillas alrededor de la lista de dependencias separadas por espacios en blanco.

sc create nuevoServicio binpath= c:\nt\system32\newserv.exe type= own start= auto depend= "+tdi netbios"

Para obtener más detalles acerca de la herramienta Sc.exe, consulte el documento Sc-dev.txt del Kit de recursos. Este documento describe Sc.exe en más detalle.

 

Etiquetas de Blogalaxia: ,

Etiquetas de Technorati: ,

2 comentarios:

Luix dijo...

Interesante artículo, pero para otra vez que copies (prácticamente de forma íntegra) un artículo de support.microsoft.com, al menos ten el detalle de indicar tus fuentes.

http://support.microsoft.com/kb/251192/es

Juan Fernando Ospina dijo...

Ese articulo para crear un servicio windows se ve algo enredado, es mejor hacerlo local con herramientas de microsoft.

http://algoritmosen.net/Lecciones/LeccionesenVisualStudio/Implementar_Servicio_Windows/tabid/92/Default.aspx

Nube