如果.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 –