viernes, 13 de febrero de 2009

Crear un servicio en Windows a partir de un programa

… o la eterna cuestión de: ¿Cómo hago que un programa se ejecute siempre sin necesidad de arrancar un perfil? -> metiéndolo como un servicio.. y por ende… ¿cómo creo un servicio de Windows con mi programita?... esta es la respuesta ^_^

Para crear un servicio con un ejecutable lo puedes hacer con herramientas de Microsoft o con herramientas de terceros.
Con herramientas de Microsoft
Se necesitan dos programas del Kit de recursos, instsrv.exe y srvany.exe; se lanza desde un cmd la línea:
instsrv.exe "Nombre del Servicio" srvany.exe
Es imprescindible pasar el path donde esten ambos ejecutables.
Una vez hecho esto, se abre regedit y en HKLM\system\CurrentControlSet\Services verás que se ha creado una clave(useasé carpeta) "Nombre del Servicio"(si abres la consola de servicios verás que ya se ve en la lista); pinchas en el árbol en ella y creas una subclave(useasé carpeta) llamada "Parameters", dentro de ella un valor de cadena llamado "Application" al que de contenido le pones Ruta\Nombre.exe. Ya tienes creado el servicio. De esta manera se crea con arranque automático y lanzado por cuenta del sistema; te metes en servicios y cambias lo que haga falta(se puede hacer desde línea de comandos con "sc.exe").
Ten en cuenta que el programa debe recibir las rutas absolutas de donde deba acceder, ya que al arrancarse como servicio digamos que "desconoce" en qué ruta se encuentra su propio ejecutable, con lo que no sabe manejar rutas relativas. Esto es así porque no se crea un servicio con el ejecutable en realidad, si no que se crea con srvany como el ejecutable del servicio y el ejecutable que queremos lanzar como parámetro (quizás si ubicamos una copia de srvany en la misma carpeta en la que está el ejecutable funciona, pero dependerá del ejecutable en sí)
Otra posibilidad, que a lo mejor te puede valer y es más simple, es lanzar la aplicación en un script de inicio del equipo; se abre el editor de políticas del sistema (gpedit.msc) y se especifica en "Configuración de equipo\Configuración de Windows\Archivos de comandos (inicio/apagado)". De esta forma se ejecutará, si bien no será un servicio.
Por último, puedes editar el registro para que se lance desde la clave "HKLM\Software\Microsoft\Windows\CurrentVersion\Run", creando un valor de tipo string (REG_SZ) al que llames como te parezca y que contenga la llamada al ejecutable. De esta forma se ejecutará, si bien no será un servicio.
---------------============================================---------------
Hay otro vínculo de Microsoft: http://support.microsoft.com/kb/251192/es que probablemente sea más preciso pero al mismo tiempo hará falta estudiárselo más.
---------------============================================---------------

Con herramientas de terceros
Existen herramientas de terceros que te permiten lanzar aplicaciones como servicios. Aquí pongo enlaces a cuatro de ellas:
Firedaemon
http://www.firedaemon.com/
Application as service 1.0
http://www.eltima.com/products/application-as-service/
Service Mill
http://www.activeplus.com/us/products/smill/
Serve All
http://www.transsoft.com/view_content.asp?ID=25

La grabadora no graba

Problema extrañísimo: la grabadora funciona (se puede grabar desde el Nero y tal) pero cuando metes un DVD virgen y desde el explorador de Windows intentas hacer doble click sobre ella, en lugar de abrírtela para que puedas añadir archivos te sale un error de Windows que pone "Función no Válida" o algo así.

Búsqueda en Google y lo que me sale es esto:

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

La solución es sencilla, pero hay que saberla. Básicamente se reduce a editar el registro de Windows y en la entrada:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\CD
Burning\Drives

seleccionar la clave correspondiente a la grabadora y ponerle como valor un "2", que le indica a Windows que es una unidad CD-RW ("1" es unidad CD-R y "3" lector). Debe ser uno de las pocas cosas que Windows cambia "en tiempo real", ya que si tienes abierto Mi PC y sacas las propiedades de la grabadora verás que ya aparece la pestaña de grabación, sin necesidad de reiniciar.

Haciendo esto el problema se solucionó, y ya permitió arrastrar archivos y grabarlos directamente.

Todo esto nos enseña dos cosas:

1. El registro de Windows es un invento del demonio 2. El Nero accede directamente al hardware, el cabrito