当未处理的异常终止执行时退出代码?

时间:2016-02-09 14:16:14

标签: c# .net exception console-application

当C#.Net控制台应用程序由于未处理的异常而终止时,是否有规则确定返回哪个退出代码或是否<255>总是使用?

我还没有找到关于此的文档。一个执行throw new Exception()的简单控制台应用程序死亡,退出代码为255.我想知道是否可以安全地假设所有未处理的异常将返回相同的错误代码或者是否存在变化/我需要注意的角落案例。

C:\Temp\> ThrowsExceptionConsoleApp.exe
C:\Temp\> echo %errorlevel%
255

1 个答案:

答案 0 :(得分:6)

不,不总是。 255是一个Unix编号,通常由退出-1生成,不清楚如何看到它。在Windows上,.NET进程通常以SEH异常代码值退出,该异常代码值使进程崩溃并终止。通常为-532462766(又名0xE0434352)用于托管异常。最后3对十六进制拼写&#34; CCR&#34;,一个缩写,其含义在时间的迷雾中丢失,在corexcep.h中声明为EXCEPTION_COMPLUS。示例问题is here

表现良好的程序订阅AppDomain.CurrentDomain.UnhandledException,并在调用Environment.Exit()时提供更好的退出代码,就像Marshal.GetHRForException()生成的那样。您将获得与托管异常类型匹配的退出代码,标准异常类型的值记录在CorError.h SDK文件中。

 echo %errorlevel%

在之前的问题中没有看到。 %errorlevel%只能有0到255之间的值,这个限制可以追溯到MS-Dos天。由于SEH异常代码总是较大,因此通常总是看到255.只有使用%errorlevel%的合理方法是假定程序在不为0时失败。除非您从程序作者那里获得特定文档。