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

Ben*_*udo 10 .net c# exception console-application

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

我一直无法找到这方面的文件.一个简单的控制台应用程序,throw new Exception()使用退出代码255 执行死亡.我想知道是否可以安全地假设所有未处理的异常将返回相同的错误代码,或者如果存在我需要注意的变体/极端情况.

C:\Temp\> ThrowsExceptionConsoleApp.exe
C:\Temp\> echo %errorlevel%
255
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 8

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

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


 echo %errorlevel%
Run Code Online (Sandbox Code Playgroud)

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

  • 似乎限制被取消了,因为在Windows 10.0.14393中,我得到`-524462766`为'ECHO%ERRORLEVEL%`. (3认同)