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

C# 未处理的异常终止执行时的退出代码?,c#,.net,exception,console-application,C#,.net,Exception,Console Application,当C#.Net控制台应用程序由于未处理的异常而终止时,是否有规则确定返回或始终使用哪个退出代码 我还没有找到关于这个的文档。一个简单的控制台应用程序,执行抛出新异常(),退出代码为255。我想知道是否可以安全地假设所有未处理的异常都将返回相同的错误代码,或者是否存在需要注意的变体/特殊情况 C:\Temp\> ThrowsExceptionConsoleApp.exe C:\Temp\> echo %errorlevel% 255 不,不总是。255是一个Unix数字,通常是用-1

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

我还没有找到关于这个的文档。一个简单的控制台应用程序,执行
抛出新异常()
,退出代码为255。我想知道是否可以安全地假设所有未处理的异常都将返回相同的错误代码,或者是否存在需要注意的变体/特殊情况

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

不,不总是。255是一个Unix数字,通常是用-1退出时生成的,不清楚您是如何看到它的。在Windows上,.NET进程通常以SEH异常代码值退出,该值使进程崩溃并终止。对于托管异常,通常为-532462766(也称为0xE0434352)。最后3个十六进制对拼写“CCR”,这是一个首字母缩略词,它的意思在时间的迷雾中消失了,在corexcep.h中声明为EXCEPTION_COMPLUS。示例问题

行为良好的程序订阅AppDomain.CurrentDomain.UnhandledException,并在调用Environment.exit()时提供更好的退出代码,如Marshal.GetHRForException()生成的退出代码。您将得到一个与托管异常类型匹配的退出代码,标准异常类型的值记录在CorError.hsdk文件中



它在以前的问题中没有看到这一点errorlevel%的值只能介于0和255之间,这一限制可以追溯到MS Dos天数。由于SEH异常代码总是更大,因此通常会看到255。使用%errorlevel%的唯一合理方法是假设程序不是0时失败。除非你从程序作者那里得到了具体的文档。

在中没有找到任何东西,所以我想运行时的退出代码对于未处理的异常情况来说不是标准化的。嗯,对于我来说,在Windows 10.0.14393上,
ECHO%ERRORLEVEL%
输出
-532462766
。这项限制似乎是因为在Windows 10.0.14393中,我得到了
ECHO%ERRORLEVEL%
-532462766
 echo %errorlevel%