当没有使用Environment.Exit()时,.net程序可以使用哪些退出代码?

Hug*_*une 15 .net c# crash exit-code

如果.net程序在终止之前未能明确设置退出代码(通过调用Environment.Exit()/ Appliation.Current.Shutdown()/ ...),那么该进程的退出代码是什么?

正常终止是否总是导致退出代码为零,以及其他可能的情况是什么?

根据Hans Passant 相关问题获得ExitCode From Exception Handler回答:" 如果程序在异常上死亡,则其退出代码通常与底层异常错误代码相同 ".

因此,一个unaugth异常可以输出退出代码.这是的情况,并始终保证是底层的异常错误代码异于零,并在特定的范围内?

是否有其他情况,.net框架或Windows可以自动设置另一个退出代码,例如一些非异常相关的崩溃(可能吗?),还是强制任务终止?

换句话说,我可以通过退出代码确定程序是否以任何异常方式终止?
或者如果在某些异常情况下也可能出现零退出代码,我是否可以Environment.Exit(somevalue)在程序的所有正常终止路径中包含a,并确保在崩溃的情况下永远不会出现此退出代码?


动机:
由于并非所有的exeptions都可以在没有严重变通方法的情况下被捕获,并且由于除了未被捕获的激活之外可能还有其他原因导致程序突然终止,因此确保所有代码路径都调用Environment.Exit()是不可能的.这就是为什么我有兴趣确定是否可以使用退出代码可靠地判断程序是否正常退出.

Han*_*ant 5

那么它的退出代码通常与底层异常错误代码相同

6个月后,你应该建立一些通常适用的信心.可能工作得很好,你在这里得不到保修.不仅仅是未处理的异常会导致进程终止,而且您永远无法确定它始终与进程在异常时死亡时运行的代码相同.

有太多的东西想要参与其中并且它并不总是最好的质量.在列表的顶部肯定是反恶意软件,那里有很多cr*pware,你永远不会知道你遇到了什么.最近的阿瓦斯特灾难提供了充分的理由来关注这一点.几乎没有它结束的地方,取代WER的公用事业很常见.

并且你对一个认为TerminateProcess()是一个解决文件锁定问题的好方法的恶作剧完全没有防御能力.或者有人绊倒电源线并拔掉机器.

专注于一点,为什么你想知道的退出代码.接下来应该做的事情是使用程序的结果继续执行.验证结果.