我正在編寫一系列Windows服務。如果在啓動過程中引發錯誤,我希望它們失敗(在OnStart()
方法中)。我曾假設僅僅在OnStart()
處發生錯誤就可以做到這一點,但我發現它是「開始」,並向我顯示一條消息,聲明「服務已經啓動,但是不活動,這是正確的嗎?」 (釋義)。我如何處理錯誤,因此實際上無法啓動服務?服務啓動時處理異常
16
A
回答
8
如果您運行的是.NET 2.0或更高版本,則可以使用ServiceBase.Stop停止OnStart的服務。否則,請從新線程調用Stop。
參考文獻[devnewsgroups(
http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic50404.aspx)
(去新聞組)
7
將所有啓動邏輯移至單獨的方法,並從該單獨方法拋出異常(或調用OnStop)。
OnStart啓動時有一些怪異現象。我發現如果OnStart()中只有一行,那麼我不會得到「服務開始,然後停止。一些服務自動停止,如果他們沒有工作要做」的消息,並拋出異常將終止處理並登錄到應用程序事件日誌。
此外,使用單獨的啓動方法,您可以使用像這樣的技術來調試它,而無需附加。 http://www.codeproject.com/KB/dotnet/DebugWinServices.aspx
16
如果你想更主要的是對服務窗口報告說有一個錯誤,從我」已經嘗試過(Windows 7上的.net 3.5),唯一的方法是設置ExitCode。我建議將它設置爲13816,因爲這會導致消息「發生未知錯誤」。見the windows error codes。
下面的示例完成了三件事情。 1 - 將ExitCode設置爲最終用戶的有用消息。它不會影響Windows應用程序日誌,但會在系統日誌中包含消息。 2 - 調用停止導致應用程序日誌中的「服務成功停止」消息。 3 - 將異常結果引發到應用程序日誌中的有用日誌條目中。
protected override void OnStart(string[] args) {
try {
// Start your service
}
catch (Exception ex) {
// Log exception
this.ExitCode = 13816;
this.Stop();
throw;
}
}
相關問題
- 1. 啓用Silverlight WCF服務異常處理
- 2. Windows服務自動啓動和停止,異常處理問題
- 3. Web服務異常處理
- 4. Web服務異常處理
- 5. WCF服務異常處理
- 6. 啓動服務器時出現異常
- 7. 啓動服務時發生異常:com.google.android.c2dm.intent.REGISTER
- 8. 處理異步ASMX Web服務異常
- 9. 可以隨時重新啓動CRM異步處理服務嗎?
- 10. 啓動ATG服務器時出現Web服務連接異常
- 11. WP7 - 處理基於異步JAVA的SOAP服務異常處理
- 12. Web API OWIN啓動異常處理
- 13. 重新啓動異常處理
- 14. 處理服務層中的Dao異常
- 15. wcf服務的異常處理
- 16. MonoTouch:WCF服務和異常處理
- 17. 的node.js異常處理服務器
- 18. 門面服務中的異常處理
- 19. android-如何處理Web服務異常
- 20. RIA服務中的異常處理
- 21. Slim Framework DB服務異常處理
- 22. DWR異常處理在服務器端
- 23. Windows服務中未處理的異常
- 24. Web服務未處理的異常
- 25. EWS-服務XmlDeserializatin異常未處理
- 26. android-如何處理Web服務異常
- 27. WCF REST服務 - 通用異常處理
- 28. 服務中的Jhipster異常處理
- 29. 未處理Windows服務異常
- 30. java rmi服務器端異常處理
參考域消失了 – hultqvist 2013-09-11 14:17:08
互聯網檔案救援:https://web.archive.org/web/20070730021813/http://www.devnewsgroups.net/group/microsoft.public.dotnet。 framework/topic50404.aspx – 2014-04-16 17:46:19