2011-10-30 64 views
0

我想問一下Windows服務。 我的服務代碼看起來像以下:服務 - 如何趕上退出代碼

try 
{ 
    //... 
} 
catch 
{ 
    Environment.ExitCode = 1; 
} 

後,我安裝我的服務,我使用的調度系統在特定時間運行服務:

net start MyService 
//or 
sc start MyService 

所以我的問題是,如何獲取信息如果我有例外嗎? 有沒有任何命令來獲取這些信息?現在我通常在運行我的應用程序,然後10分鐘後。停止服務。我想要做中間調度任務,它會告訴我在應用程序中是否發生錯誤。我試過了所有「sc」的選項 - 但它只給出關於服務的信息。

約束上:

  • 我無法登錄的錯誤和異常到事件日誌或文件
  • 不想改變我的代碼
  • 在調度系統,我可以使用蝙蝠腳本(所以這素文字是隻有我可以改變的地方)
+0

我認爲這裏要考慮的問題是爲什麼你要執行你的程序作爲Windows服務而不是獨立的可執行文件。當服務由服務控制管理器運行時,我不認爲有任何方法可以讓流程的退出代碼作爲服務運行。如果您只是在調度程序的驅動下按需運行進程,請考慮使用獨立的可執行文件。 – ig0774

回答

1

標準的方法是將錯誤和異常記錄到event log--無論是爲您的服務創建的特定的一個還是SIM卡使用該服務作爲事件日誌的新來源。

您可以使用WMI定期檢查事件日誌中的錯誤。

+0

WMI是一個很好的解決方案,但我無法做到這一點。我想在我的日程安排系統中擁有一切。 我無法創建事件日誌。我需要從winform應用程序中獲取服務的異常代碼。 – Jack

+0

@ user1021060 - 你能否更新你的問題並解釋你的限制?據我所知,寫入事件日誌應該沒有問題。 – Oded

+0

@ user1021060 - 以及其他任何約束。我可以告訴你寫信給一個文件,然後你告訴我這也不好。或者使用一個tcp套接字。或共享內存。你需要解釋_all_約束。 – Oded

0

在沒有能夠登錄到事件日誌的情況下,是否可以創建自己的「事件日誌」?使用中間服務定期輪詢的文件或數據庫表可以滿足您的需求。

+0

我已經更新了我對這個問題的限制。我不能創建自己的事件日誌,文件或數據庫。 – Jack