Estoy intentando construir un servicio de Windows con MingW. Necesita excepciones de seguridad de subprocesos, por lo que agregué el indicador del enlazador -mthreads. La aplicación funciona bien desde la línea de comandos, pero cuando intento iniciarla desde services.msc, aparece el error 1054 ("El servicio no respondió a la solicitud de inicio o control de manera oportuna"). El servicio se inicia si lo vuelvo a construir sin el -mthreads. ¿Cómo puedo hacer que esto funcione con -mthreads?Servicio de Windows multiproceso en MingW
Respuesta
Me pregunto si puede depurarlo cuando se ejecuta como un servicio. Debe haber algo que espanta a su programa cuando el host del servicio lo ejecuta. Tal vez intente adjuntar un depurador a svchost.exe, al menos puede ver qué módulos están cargados y quizás qué excepción causa el bloqueo.
¿Su aplicación incluso se está iniciando en absoluto? Llame al OutputDebugString
(o su equivalente) al comienzo de su función main
para ver si llega tan lejos. (Agarre DbgView
desde SysInternals si no lo tiene ya)
Si no llega tan lejos, comenzamos a buscar lo obvio: ¿se trata de que la aplicación no encuentre el archivo DLL de tiempo de ejecución? Puede ser que tenga el tiempo de ejecución normal en su RUTA, pero no puede encontrar la versión MT. Eso podría explicar el comportamiento que describes. Es posible que deba copiar el tiempo de ejecución de MT o actualizar la RUTA en consecuencia.
La aplicación ni siquiera se inicia. Pero se ejecuta desde la línea de comando. Por lo tanto, no puede ser el problema con las bibliotecas de tiempo de ejecución. –
¿Dónde está la versión MT de las bibliotecas de tiempo de ejecución? Debe estar en el directorio de la aplicación. Quizás las bibliotecas de tiempo de ejecución estén disponibles en la RUTA cuando se ejecuta como su usuario, pero no como el sistema. Use depends.exe para rastrear de qué dll depende. También puede intentar ejecutar la aplicación como otro usuario. –
Sospecho que -mthreads está generando una dependencia en una DLL, y esa DLL no está en la ruta cuando se está ejecutando como un servicio. En mi entorno cygwin, si compilo un programa trivial con "-mno-cygwin -mthreads", obtengo una dependencia en MINGWM10.DLL, que ciertamente no estaría en la ruta cuando se ejecute como un servicio. Si intento ejecutarlo sin establecer PATH, se bloquea cuando comienza a cargarse (y deja un turd en el registro de eventos de la aplicación).
Me gustaría llamar a su exe en Dependency Walker (http://www.dependencywalker.com) para ver lo que está cargando en tiempo de carga, y consulte su registro de eventos de Windows para ver si hay alguna sugerencia allí. Probablemente necesite colocar una copia de las DLL que necesita junto con el ejecutable.
Necesita mingwm10.dll en el directorio de trabajo o en [edit: system, not per user] PATH, porque los programas de C++ compilados con la opción -mthread tienen esa dependencia. Si está bastante seguro de que su código nunca lanzará una excepción ni propagará a través de su pila, use -fno-exception en lugar de -mthread para resolver la dependencia.
- 1. Biblioteca de subprocesos para el servicio de Windows multiproceso
- 2. ¿Cómo detener correctamente un servicio de Windows .NET multiproceso?
- 3. englobamiento con MinGW en Windows
- 4. Uso de zlib en Windows mingw
- 5. Construyendo GLEW 1.7.0 en Windows usando MinGW
- 6. Múltiples tiempos de espera simultáneos de conexión SQL en multiproceso de Windows Servicio
- 7. Windows Qt con MinGw o Visual Studios?
- 8. ¿Cómo construir el protobuf de Google en Windows usando MinGW?
- 9. ¿Cómo usar la API de Windows en MinGW?
- 10. Python Multiproceso diff entre Windows y Linux
- 11. __uint128_t en mingw gcc
- 12. Enchufes en MinGW
- 13. Diferencia de rendimiento para multiproceso y multiproceso
- 14. ¿Cómo se implementa el multiproceso de Python en Windows?
- 15. Vinculando estáticamente a libarchive en Windows con MinGW
- 16. Intentando instalar MinGW y Tk para Perl en Windows 7
- 17. Cómo usar MinGW make con Vim en Windows
- 18. ¿Cómo compilar googletest en Windows usando mingw con msys?
- 19. Alojamiento del servicio WCF en el servicio de Windows
- 20. problema con mingw
- 21. Servicio de Windows terminado inesperadamente
- 22. filesystemwatcher como servicio de Windows?
- 23. Despliegue del servicio de Windows
- 24. WCF Servicio de Windows TimeOut
- 25. Crear un servicio de Windows en delphi
- 26. WCF Seguridad en un servicio de Windows
- 27. Servicio de Windows w/FileSystemWatcher en C#
- 28. Crear un servicio de Windows en vb6
- 29. Redirección de entrada en gdb (MinGW)
- 30. ¿Hay fmemopen() en MinGW
La conexión de un depurador a svchost.exe no ayudó. El servicio no tiene la oportunidad de comenzar. El error se produce incluso antes de eso. –