Sto cercando di costruire un servizio di Windows con MinGW. Ha bisogno di eccezioni thread-safe, quindi ho aggiunto il flag del linker -mthreads. L'applicazione funziona benissimo dalla linea di comando, ma quando provo ad avviarlo da services.msc, l'errore 1054 ("il servizio non ha risposto alla richiesta di avvio o controllo in modo tempestivo") è sollevata. Il servizio si avvia se lo ricostruisco senza il flag -mthreads. Come posso farlo funzionare con -mthreads?servizio multithread di Windows in MingW
risposta
Mi chiedo se è possibile eseguire il debug quando viene eseguito come un servizio. Deve esserci qualcosa che spaventa il tuo programma quando l'host del servizio lo esegue. Forse prova ad associare un debugger a svchost.exe, almeno puoi vedere quali moduli sono caricati e magari quale eccezione causa l'arresto anomalo.
è la vostra applicazione, anche in fase di avvio a tutti? Metti una chiamata a OutputDebugString
(o equivalente) all'inizio della tua funzione main
per vedere se arriva così lontano. (. Grab DbgView
da SysInternals se non avete già)
Se non arrivare così lontano, abbiamo avviare il controllo per l'ovvio: si tratta di una questione di applicazione non trovare la DLL di runtime? Potrebbe essere che tu abbia il normale runtime nel suo PATH, ma non può trovare la versione MT. Questo potrebbe spiegare il comportamento che descrivi. Potrebbe essere necessario copiare il runtime MT o aggiornare di conseguenza il PERCORSO.
L'applicazione non si avvia nemmeno. Ma viene eseguito dalla riga di comando. Quindi non può essere il problema con le librerie di runtime. –
Dove si trova la versione MT delle librerie di runtime? Dovrebbe essere nella directory dell'applicazione. Forse le librerie di runtime sono disponibili nel PERCORSO quando si esegue come utente, ma non come sistema. Usa depends.exe per rintracciare quale dll stai dipendendo. Potresti anche provare a eseguire l'app come un altro utente. –
I sospetti -mthreads sta portando una dipendenza su una DLL e che la DLL non si trova sul percorso quando è in esecuzione come servizio. Nel mio ambiente cygwin, se compilo un programma banale con "-mno-cygwin -mthreads", ottengo una dipendenza da MINGWM10.DLL, che certamente non sarebbe sul percorso quando è in esecuzione come servizio. Se provo a eseguirlo senza alcun set PATH, si blocca quando inizia a caricare (e lascia un turd nel registro eventi dell'applicazione).
Mi piacerebbe portare in Exe in Dependency Walker (http://www.dependencywalker.com) per vedere cosa si sta caricando in fase di caricamento, e controllare il registro eventi di Windows per vedere se ci sono suggerimenti lì. Probabilmente avrai bisogno di mettere una copia delle DLL di cui ha bisogno accanto all'eseguibile.
È necessario mingwm10.dll nella directory di lavoro o in [modifica: sistema, non per utente] PERCORSO, poiché i programmi C++ compilati con l'opzione -mthread hanno tale dipendenza. Se sei abbastanza sicuro che l'eccezione non verrà mai generata dal tuo codice né propagata attraverso lo stack, usa -fno-exception anziché -mthread per risolvere la dipendenza.
- 1. Come utilizzare l'API di Windows in MinGW?
- 2. Globbing con MinGW su Windows
- 3. Utilizzo di zlib sotto windows mingw
- 4. Come creare il protobuf di Google in Windows usando MinGW?
- 5. Windows Qt con MinGw o Visual Studios?
- 6. Come posso creare un multithread in C per Windows?
- 7. Servizio WCF vs servizio Windows
- 8. Servizio WCF vs servizio Windows
- 9. Come installare MinGW 64 bit in Windows 7
- 10. MinGW programmi compilati in crash su 64 bit Windows
- 11. Meteor in Git Shell (mingw)
- 12. Creazione di GLEW 1.7.0 su Windows utilizzando MinGW
- 13. Disegno multithread in .NET?
- 14. Servizio di Windows terminato in modo imprevisto
- 15. servizio di Windows Installare finisce in Rollback
- 16. UIWebView in multithread ViewController
- 17. Compressione multithread in C#
- 18. multithread NamePipeServer in C#
- 19. filesystemwatcher come servizio di Windows?
- 20. Arresto di un servizio Windows multithreading
- 21. Differenze tra MinGW da msysgit (ovvero Git su Windows) e MinGW da MinGW.org
- 22. Servizio WCF come servizio Windows guai (Windows 7)
- 23. Multithread di php
- 24. Reindirizzamento dell'input in gdb (MinGW)
- 25. Matrice multithread di array?
- 26. Tecniche di debug multithread
- 27. Servizio distribuzione Windows
- 28. Servizio hosting IIS WCF vs servizio Windows
- 29. Servizio Windows con timer
- 30. alternativa a Windows Servizio
L'aggiunta di un debugger a svchost.exe non è stata di aiuto. Il servizio non ha la possibilità di iniziare. L'errore è stato lanciato ancor prima. –