2009-10-12 20 views

Respuesta

16

There's a good example on how to set up a minimal service on MSDN. Consulte las partes sobre cómo escribir la función principal, el punto de entrada y también el código de ejemplo.

Una vez que haya instalado y ejecutado un servicio de Windows, descubrirá el siguiente gran problema: es una pena depurarlo. No hay terminal (y por lo tanto no hay stdout/stderr) y tan pronto como intente ejecutar el ejecutable, en realidad inicia el servicio y luego vuelve a usted.

Un truco que he encontrado muy útil es agregar una opción -foreground a su aplicación para que si se ejecuta con esa marca, evite el código de inicio del servicio y se ejecute como una aplicación de consola normal, lo que hace que sea mucho más fácil depurar. En VS.Net configure las opciones de depuración para invocar con ese indicador.

+1

Hay algunos consejos útiles para la depuración aquí (especialmente el uso de gflags para iniciar automáticamente el depurador): http: // support .microsoft.com/kb/824344 –

+0

¿agrego el -foreground a la línea de comando? – Maciek

+0

Sí, si se ejecuta sin un indicador, el servicio se instala y se ejecuta (esta es la forma en que los servicios deben funcionar). Si ejecuta con la opción -foreground, omite el paso de instalación del servicio. –

2

La solución más simple podría ser crear un nuevo proyecto de servicio de Windows en Visual Studio y copiar el código en el nuevo proyecto.

Si refactoriza su código para que haya dividido la IU (en este caso la consola) de la lógica, podría crear una biblioteca que haga el trabajo y luego llamarlo desde el proyecto de consola y el Proyecto de servicio.

+0

En lugar de cortar y pegar, cargue su código de trabajo (- la IU) en el servicio como una biblioteca – Patrick

0

Srvany solo permite un servicio al mismo tiempo. Entonces escribo mi srvany (sFany) para hacer que nginx y php-cgi se ejecuten juntos como servicio de Windows. Aquí está la fuente https://github.com/stxh/sFany

3

Hay un muy buen ejemplo en MSDN here

Es un proyecto de servicio de la caldera placa de C++ que se ha auto instalación/función de desinstalación y el servicio de registros de arranque y parada de eventos en el registro de eventos de Windows. Se puede detener e iniciar a través de la aplicación de servicios (snapin) como otros servicios. Es posible que desee darle inicialmente los derechos de LocalSystem para que funcione, ya que en xp al menos no tiene suficientes derechos para comenzar con los derechos proporcionados por el proyecto de LocalService. El proyecto de Visual Studio 2008 se ejecuta fuera de la caja a pesar de las instrucciones descargadas que implican lo contrario.

Un poco tarde pero espero que esto ayude a otra persona.

Cuestiones relacionadas