如果.net程序在終止之前未明確設置退出代碼(通過調用Environment.Exit()
/Appliation.Current.Shutdown()
/...),那麼該過程的退出代碼是什麼?當沒有使用Environment.Exit()時,.NET程序可以使用哪些退出代碼?
正常終止是否總是導致退出代碼爲零,以及其他可能的情況是什麼?
根據this answer到由Hans帕桑特的相關問題Getting ExitCode From Exception Handler:「如果程序上的異常晶粒然後退出代碼通常相同底層異常錯誤代碼」。
因此,一個uncaugth異常可以退出代碼。這是總是的情況下,並且是基本的異常錯誤代碼總是保證是不同於零,並在一個特定的範圍?
是否有其他地方的情況在.NET Framework或Windows可以自動設置另一個退出代碼,比如一些非異常相關的崩潰(這可能嗎?),或強制任務殺?
換一種說法,我可以通過退出代碼來確定程序是否以任何異常方式終止?
或者如果在某些異常情況下退出代碼也可能發生,我可否在程序的所有正常終止路徑中包含Environment.Exit(somevalue)
,並確保在出現崩潰時不會出現此退出代碼?
動機:
由於not all exeptions are catchable沒有嚴重的變通方法,並且因爲可能有其他原因比未捕獲excpetions其他突發程序終止,確保所有的代碼路徑調用Environment.Exit()不是alwas可能。這就是爲什麼我有興趣確定是否可以使用退出代碼來可靠地確定程序是否正常退出。
我在我的問題和建議的重複之間添加了差異。雖然第二個答案也有助於我的問題的一部分,但它沒有完全回答它,而問題本身則完全不同。 – HugoRune
Tangental建議:啓用Windows錯誤報告,並創建啓用小型轉儲的選項。這樣你不僅有一個退出代碼,而且還可以通過調試器傳遞異常記錄和部分堆棧。 (就像使用SOS調試器的WinDBG一樣。)即使沒有小型轉儲程序,WER也會捕獲有關錯誤消息本身的一些信息。對於內部應用程序,您甚至可以設置服務器以便自動提交崩潰報告。 TechNet上的此[頁面](https://technet.microsoft.com/en-us/library/cc709644.aspx)有一個很好的概述。 – theB
退出代碼是相當無用的恕我直言。更多在這裏:http://stackoverflow.com/questions/4344923/process-exit-code-when-process-is-killed-forcibly –