我有一個應該運行24 * 7 * 365的C#4.0 Windows控制檯應用程序。 (我有一個Windows服務來監視這個應用程序,並且如果它由於某種原因而終止,就啓動它)。此控制檯應用程序的啓動涉及一些複雜的資源消耗活動 - 所以我必須確保不會頻繁重新啓動控制檯應用程序。控制檯應用程序有3個System.Timers.Timer實例,它們在計時器過去時執行一些活動(時間間隔分別爲10秒,15秒和2小時)。什麼纔是正確的方法來防止控制檯應用程序終止,並保持活着?有人可以請建議!防止終止控制檯應用程序
回答
從你已經在你的意見,你有一個控制檯應用程序的唯一理由說所以你可以閱讀調試信息。這個答案將離開這個假設。
控制檯應用程序不夠可靠,無法做你想做的事情,有很多情況下你會遇到應用程序不會啓動或可能啓動多次(如果沒有人登錄,你會怎麼做?如果多人登錄,你會怎麼做?)
要做的最好的事情就是把這個密集型操作寫成服務,然後把輸出到控制檯的任何診斷信息都輸入到事件日誌中或者把它放到調試器中。
如果你想寫一條消息到應用程序事件日誌,你所需要做的就是將你的信息寫入this.EventLog.WriteEntry(message)
。這將在應用程序事件日誌中爲您的服務生成一個信息事件。如果您想將嚴重程度提高到警告或錯誤,則只需使用the other overload即可。
如果你想寫入與應用程序不同的日誌(比如你自己的日誌),你將需要服務的installer創建你需要的任何源/日誌(如果你需要幫助,請提出一個新問題) 。然後在您的服務中將AutoLog
設置爲false,然後創建自己的指向新日誌的事件日誌實例。
如果您想要在診斷問題時才顯示的日誌,最簡單的解決方案是將您的Console.WriteLine(message)
語句更改爲Debugger.Log(1, "DebugLogging", message + Environment.NewLine)
。這會導致您的消息在運行時連接到服務時顯示在「調試」輸出窗口中(您知道如何連接到服務以在其上運行調試器嗎?如果沒有問一個新問題它)。我不會推薦使用Debug.WriteLine(message)
,除非您在發佈模式下構建時從不打算進行診斷。這是因爲Debug.WriteLine
具有屬性[Conditional("DEBUG")]
。這是因爲只有在編譯期間DEBUG標誌被設置時,該函數纔會被執行,並且Release沒有設置該標誌。
如果你想有一個更強大的解決方案,我建議學習如何使用log4net這是簡單的解決方案。 Log4net可以讓你完成以上所有工作,還有更多。例如,您可以控制通過配置文件寫入事件日誌的多少(程序甚至不需要重新啓動以使用新設置開始記錄,它會檢測您何時執行保存。)
這樣您可以將詳細日誌消息放入代碼中,但只需通過更改XML配置文件中的一個設置即可在需要時將其打開。
如果您對設置兩個頂級建議中的任何一個或設置log4net有任何疑問,請隨時就這些主題提出新問題。
謝謝,我已經在使用Log4Net了。現在我已經將這個完整的功能作爲服務來實現。 – Thomas 2012-08-16 02:11:44
您可以簡單地使用Console.ReadLine()使控制檯保持活動狀態。但Windows服務可能是你想要的。
while (Console.ReadLine() != "I really want to stop this application") { }
或類似的東西?
的類似應用思維(如我的世界......),你就會有一個循環,如以下幾點:
string command;
Console.Write("> ");
while ((command = Console.ReadLine()).ToUpper() != "STOP")
{
// Do something else based on the command
...
Console.Write("> ");
}
- 1. 終止C#控制檯應用程序
- 2. 線程不在delphi的控制檯應用程序中終止?
- 3. 如何在c#控制檯應用程序中止時終止子進程?
- 4. 以Java終止控制檯應用程序
- 5. 如何創建不終止的控制檯應用程序?
- 6. 在c#中執行期間終止控制檯應用程序
- 7. 控制檯終止時的應用程序
- 8. 控制檯應用程序關閉/終止時檢測?
- 9. C#控制檯應用程序:防止Control-C被打印?
- 10. 防止VBscript應用程序顯示控制檯窗口
- 11. 在Delphi控制檯應用程序中防止閃爍
- 12. 終止控制檯ReadLine
- 13. Eclipse控制檯終止碼
- 14. 如何終止控制檯?
- 15. 防止用戶終止Java程序?
- 16. 防止控制檯返回
- 17. 如何防止殺死/終止或停止Windows應用程序
- 18. 如何防止後臺線程中的異常終止應用程序?
- 19. Libssh2:防止後臺任務被終止
- 20. 如何終止未關聯進程的Windows控制檯應用程序?
- 21. telephonyManager.listen強制應用程序終止
- 22. 防止強制殺死應用程序
- 23. 如何防止由於應用程序終止而中止線程?
- 24. 應用程序不終止
- 25. 終止應用程序
- 26. EnterpriseLibrary.Logging終止應用程序
- 27. 應用程序終止
- 28. 防止Web應用程序
- 29. 應用程序終止:終止叫在控制檯消息以下行拋出的「NSException」
- 30. 強制後臺應用程序在iOS模擬器中終止
你現在還活着嗎?當然你有一個循環? 'while(true)Console.ReadKey()'是否足夠? – 2012-08-15 07:40:42
你需要說明是什麼導致它在第一個地方終止 – 2012-08-15 07:40:54
我不得不問:你*真*有一個*服務*來監視和啓動*永遠在運行的控制檯* ...?你爲什麼不把代碼**移入服務**(因爲你描述的是服務的行爲) – 2012-08-15 07:42:23