我正在嘗試用MingW構建Windows服務。它需要線程安全的異常,所以我添加了鏈接標誌-ththreads。該應用程序在命令行下工作正常,但是當我嘗試從services.msc啓動時,1054錯誤(「服務未及時響應啓動或控制請求」)被引發。如果我在沒有-mthreads標誌的情況下重新構建服務,服務將啓動。我如何才能使用-ththreads?MingW的多線程Windows服務
回答
我不知道你是否可以在作爲服務運行時進行調試。當服務主機運行它時,必定會有一些讓你的程序驚慌的事情。也許嘗試附加一個調試器到svchost.exe,至少你可以看到哪些模塊被加載,並且可能導致崩潰的異常。
你的應用程序甚至可以啓動嗎?在main
函數的開始處撥打OutputDebugString
(或等效函數),看看它是否能達到那麼遠。 (抓鬥DbgView
從SysInternals如果沒有它的話)
如果沒有走到這一步,我們開始了明顯的檢查:這是沒有找到運行時DLL的應用程序的問題?這可能是因爲您的PATH中包含常規運行時,但無法找到MT版本。這可以解釋你描述的行爲。您可能需要複製MT運行時或相應地更新PATH。
該應用程序甚至沒有啓動。但它從命令行運行。所以它不能成爲運行時庫的問題。 – 2009-09-21 13:53:23
運行時庫的MT版本在哪裏?它應該在應用程序目錄中。運行時庫可能在PATH中作爲用戶運行,但不作爲系統運行。使用depends.exe來追蹤你所依賴的dll。您也可以嘗試以另一個用戶身份運行該應用程序。 – 2009-09-21 17:43:29
我懷疑-mthreads引入了對DLL的依賴關係,並且該DLL作爲服務運行時不在路徑上。在我的cygwin環境中,如果我用「-mno-cygwin -mthreads」編譯了一個簡單的程序,我得到了對MINGWM10.DLL的依賴,當它作爲一個服務運行時,肯定不會在路徑上。如果我嘗試在沒有設置PATH的情況下運行它,它會在開始加載時崩潰(並在應用程序事件日誌中留下一片咕嚕聲)。
我會在Dependency Walker(http://www.dependencywalker.com)中調出你的exe文件,看看你在加載時正在加載什麼,並檢查你的Windows事件日誌以查看是否有任何提示。您可能需要將它需要的DLL副本放在可執行文件中。
在工作目錄或[編輯:系統,而不是每個用戶] PATH中需要mingwm10.dll,因爲使用-mthread選項編譯的C++程序具有該依賴關係。如果你非常確定你的代碼永遠不會拋出異常,也不會通過堆棧傳播,那麼使用-fno-exception而不是-mthread來解決依賴關係。
- 1. 多線程Windows服務的線程庫
- 2. 多線程Windows服務
- 3. 多線程Windows服務 - Erlang
- 4. Windows服務和多線程
- 5. Windows服務和mingw
- 6. 停止多線程的Windows服務
- 7. Windows服務中的多個線程
- 8. Windows服務中的多線程
- 9. Windows服務計時器多線程
- 10. 與Windows服務,blockingcollection和多線程
- 11. 線程的Windows服務
- 12. 暫停Windows服務線程?
- 13. 多線程Windows服務處理Windows Message Queue
- 14. 多線程服務器:SwingWorker Vs線程?
- 15. 線程加入多線程服務器
- 16. Windows服務和線程編程.NET
- 17. 多線程Web服務器
- 18. 多線程gSOAP服務
- 19. Java服務器多線程
- 20. 多線程諮詢服務
- 21. 安卓多線程服務
- 22. 多線程web服務?
- 23. Android多線程服務
- 24. 多線程服務器Java
- 25. TCP多線程服務器
- 26. Android多線程和服務
- 27. 多線程服務器
- 28. Windows服務線程內的計時器
- 29. Windows服務的簡單線程問題
- 30. 關閉具有線程的Windows服務
將調試器附加到svchost.exe沒有幫助。該服務沒有得到啓動的機會。甚至在此之前拋出錯誤。 – 2009-09-17 03:48:56