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

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

我一直无法找到相关文档。 一个简单的控制台应用程序执行throw new Exception()死亡退出代码255.我想知道是否可以安全地假设所有未处理的exception将返回相同的错误代码或如果有变化/角落情况我需要是意识到。

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

不,不总是。 255是一个Unix编号,通常由-1退出生成,不清楚你是如何看到它的。 在Windows上,.NET进程通常以SEHexception代码值退出,该exception代码值使进程崩溃并终止。 通常为-532462766(又名0xE0434352)用于托管exception。 最后3个hex对拼写“CCR”,这个缩写词的意思在时间的迷雾中丢失,在corexcep.h中声明为EXCEPTION_COMPLUS。 示例问题在这里 。

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


  echo %errorlevel% 

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