Ich versuche, einen Windows-Dienst mit MingW zu bauen. Es benötigt Thread-sichere Ausnahmen, also habe ich das Linker-Flag -mthreads hinzugefügt. Die Anwendung funktioniert einwandfrei von der Befehlszeile, aber wenn ich versuche, es von services.msc zu starten, wird der 1054-Fehler ("der Dienst reagierte nicht auf die Start- oder Steuerelementanforderung in einer pünktlichen Weise") ausgelöst. Der Dienst startet, wenn ich es ohne die -mthreads Flag neu erstellen. Wie kann ich mit -mthreads arbeiten?Multithread-Windows-Dienst in MingW
Antwort
Ich frage mich, ob Sie es debuggen können, wenn es als Dienst ausgeführt wird. Es muss etwas Spooking Ihr Programm sein, wenn Service-Host es ausführt. Vielleicht versuchen Sie, einen Debugger an svchost.exe anzuhängen, zumindest können Sie sehen, welche Module geladen sind und vielleicht welche Ausnahme den Absturz verursacht.
Wird Ihre Anwendung überhaupt überhaupt gestartet? Rufen Sie zu Beginn Ihrer main
-Funktion einen Anruf an OutputDebugString
(oder gleichwertig) an, um zu sehen, ob es sogar so weit kommt. (Greifen Sie DbgView
von SysInternals, wenn Sie es nicht schon haben.)
Wenn es nicht so weit kommt, fangen wir an, nach dem Offensichtlichen zu suchen: ist es eine Sache der Anwendung, die Laufzeit-DLL nicht zu finden? Es könnte sein, dass Sie die reguläre Laufzeit in PATH haben, aber die MT-Version nicht finden kann. Das könnte das Verhalten erklären, das du beschreibst. Möglicherweise müssen Sie die MT-Laufzeit kopieren oder den PATH entsprechend aktualisieren.
Die Anwendung startet nicht einmal. Aber es läuft von der Kommandozeile. Es kann also nicht das Problem mit den Laufzeitbibliotheken sein. –
Wo ist die MT-Version der Laufzeitbibliotheken? Es sollte im Anwendungsverzeichnis sein. Vielleicht sind die Laufzeitbibliotheken im PATH verfügbar, wenn sie als Benutzer ausgeführt werden, aber nicht als System. Verwenden Sie depends.exe, um herauszufinden, auf welche DLLs Sie angewiesen sind. Sie können auch versuchen, die App als ein anderer Benutzer auszuführen. –
Ich vermute, -mthreads bringt eine Abhängigkeit von einer DLL, und diese DLL ist nicht auf dem Pfad, wenn es als Dienst ausgeführt wird. Wenn ich in meiner cygwin-Umgebung ein triviales Programm mit "-mno-cygwin -mthreads" kompiliere, bekomme ich eine Abhängigkeit von MINGWM10.DLL, die bei Ausführung als Dienst sicherlich nicht auf dem Pfad wäre. Wenn ich versuche, es ohne PATH-Set auszuführen, stürzt es beim Laden ab (und hinterlässt einen Turd im Application-Ereignisprotokoll).
Ich würde Ihre exe in Dependency Walker (http://www.dependencywalker.com) bringen, um zu sehen, was Sie beim Laden laden, und überprüfen Sie Ihre Windows-Ereignisprotokoll, um zu sehen, ob es Hinweise gibt. Wahrscheinlich müssen Sie eine Kopie der benötigten DLLs neben der ausführbaren Datei ablegen.
Sie benötigen mingwm10.dll im Arbeitsverzeichnis oder in [edit: system, not pro user] PATH, da C++ - Programme, die mit der Option -mthread kompiliert wurden, diese Abhängigkeit haben. Wenn Sie sicher sind, dass die Ausnahme niemals von Ihrem Code ausgelöst wird oder sich nicht über Ihren Stack ausbildet, verwenden Sie -fno-exception anstelle von -mthread, um die Abhängigkeit zu beheben.
- 1. Sockets in MinGW
- 2. Eingabeumleitung in Gdb (MinGW)
- 3. MinGW-Befehlszeilenbegrenzung?
- 4. MinGW Verbindungsproblem
- 5. stat() in mingw arbeitet falsch
- 6. Was ist der Unterschied zwischen MinGW, MinGW-w64 und MinGW-Builds?
- 7. machen Problem mit Mingw
- 8. DevC++ (Mingw) Stacklimit
- 9. Warum existiert Mingw?
- 10. GLFW MinGW Link Fehler
- 11. MinGW und std :: thread
- 12. VTune Analyzer mit mingw
- 13. localtime_r Unterstützung auf MinGW
- 14. Mingw Mehrfachdefinition von _Unwind_resume
- 15. MinGW erzeugt keine Warnungen
- 16. MinGW-w64 Offline-Installer
- 17. OpenGL + Mesa 3D + MinGW
- 18. Unterstützt MinGW MFC?
- 19. wWinmain, Unicode und Mingw
- 20. compile cdrtools mit mingw
- 21. Kompilieren von Ruby 1.9.1 in MinGW
- 22. Fehler in C++ Unicode-Programm mit MinGW
- 23. Mit __argc und __argv in MinGW
- 24. Statische Verknüpfung von Bibliotheken in MinGW
- 25. Verknüpfung von dxguid.obj in msys (MinGW)
- 26. Mingw libgcc_s_sjlj-1.dll fehlt
- 27. MinGW kompilieren für MS DOS
- 28. C: Regex-Bibliothek mit MinGW
- 29. Anwendungsbereitstellung mit MinGW und Qt5.6
- 30. MinGW/GNU Make - "mehrere Zielmuster"
Das Hinzufügen eines Debuggers zu svchost.exe hat nicht geholfen. Der Dienst bekommt keine Chance zu starten. Der Fehler wird bereits davor ausgelöst. –