c# - 从异常处理程序获取 ExitCode

标签 c# exception exit-code

我的控制台应用程序中有以下错误处理程序

主要流程:

AppDomain.CurrentDomain.UnhandledException +=
                new UnhandledExceptionEventHandler(ErrorHandler);

处理程序:

static void ErrorHandler(object sender, UnhandledExceptionEventArgs args)
        {
            Exception e = (Exception)args.ExceptionObject;
            ... Loging Error ...
            //Environment.Exit(?);
        }

问题是记录了错误,但在应用程序失败并显示窗口弹出窗口(应用程序没有响应)之后。

所以我想添加Environment.Exit()来防止这种行为,但是如何从异常中指定exitCode?我不想设置 Exit(0) (这意味着一切都好),因为我还想在触发此脚本的调度程序应用程序中看到错误(仅显示发生了某些错误,异常已记录的信息)。

谢谢

最佳答案

大多数程序员只是使用Environment.Exit(1)。几乎总是工作得很好。但这在技术上是不正确的,如果程序因异常而终止,那么其退出代码通常与底层异常错误代码相同。事件处理程序不应更改该行为。

正确地做起来很困难:

   Environment.Exit(System.Runtime.InteropServices.Marshal.GetHRForException(e));

这里有一个 FUD 因素,您不能完全信任具有未设置错误代码的自定义异常对象的库。仍然可以,后备是 E_FAIL。

关于c# - 从异常处理程序获取 ExitCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32394877/

相关文章:

c# - 如何存储不同环境的凭据.NET Core 2.1

c# - 我无法打开 10 秒前写入的文件

c# - 谁在 C# 中调用 Main() 方法? Main()方法异常时如何退出应用程序?

macos - 如何通过SSH获取在OSX终端中运行的命令的退出状态代码?

Python 子进程返回错误的退出代码

java - 使用Java SecurityManager阻止我读取文件

c# - 为什么我的不安全代码块比我的安全代码块慢?

c# - 如何缩小 UISplitView

java - Spring Data REST @ExceptionHandler

android - 以字节为单位的包大小