【问题标题】:Unexpected exit code from a .NET console application.NET 控制台应用程序的意外退出代码
【发布时间】:2016-08-29 07:34:15
【问题描述】:

我编写了一个控制台应用程序和一个配套类库来从云服务中导出一些数据。该应用程序由 SQL Server Integration Services 调用,该服务依赖于应用程序返回的退出代码来确定它是否正常工作。

应用程序间歇性地返回退出代码 -532462766 (0xE0434352),这是 .NET 未处理异常的一般错误代码。我完全搞不懂为什么会这样。

应用程序生成的日志文件没有显示任何问题,并且看起来一切都已成功完成。

应用程序事件查看器日志中没有条目。

应用程序甚至有一个未处理的异常处理程序:

AppDomain.CurrentDomain.UnhandledException += UnhandledErrorHandler;
...
private void UnhandledErrorHandler(object sender, UnhandledExceptionEventArgs e) {
    logWriter.Write(e.ExceptionObject.ToString(), logLevel.Fatal);
    logWriter.Write("Exiting now...", logLevel.Fatal);
    Dispose();
}

我什至编写了一个批处理文件来执行应用程序并记录退出代码,然后再将其传递给 SSIS。 SSIS 收到的退出代码是应用程序返回的代码。但我看不到任何地方发生了未处理的异常。

控制台应用程序通过定义Main() 来返回退出代码,如下所示:

class Program {
    static int Main(string[] args) {

    ...

    return (Success) ? 0 : 1;
}

因为它是间歇性的(并且数据提取可能需要几个小时),所以我不能只在 Visual Studio 中运行它并对其进行调试。我怀疑这可能与应用程序确实运行了这么长时间有关,但我似乎无法确认。

还有什么其他因素可以导致 .NET 应用程序返回该退出代码?我在故障排除中遗漏了什么吗?

【问题讨论】:

  • 也许this 帖子和答案可以帮助你。是否可以注释掉代码的某些部分以查明问题?您是否还部署了 PB 文件以获取更多信息,并且您是否已经排除了内存问题?
  • 感谢 Jeroen,但我已经看到了这个问题,不幸的是它没有帮助,因为我已经有一个未处理的异常处理程序,并且应用程序事件查看器日志中没有条目。我将尝试部署 PDB 文件,看看是否能获得任何其他信息。

标签: c# .net


【解决方案1】:

快速检查:将整个代码包装在 try catch 块中,并将异常保存在日志文件中。

static int Main(string[] args)
{
    try
    {

          //your existing code....

    }
    catch(Exception Ex)
    {
        //write your log results here.

    }
}

【讨论】:

  • 不要忘记记录内部异常
【解决方案2】:

检查您是否使用多个应用程序域。当在 AppDomain B 中引发异常 X 并且由于不可序列化而无法跨到 AppDomain A 时,我遇到了同样的问题。另见best practices for exceptions(搜索“跨应用程序域”):

当您创建用户定义的异常时,您必须确保 异常的元数据可用于正在执行的代码 远程,包括跨应用程序域发生异常时。为了 例如,假设 App Domain A 创建 App Domain B,它执行 抛出异常的代码。为 App Domain A 正确捕获和 处理异常,它必须能够找到该程序集 包含 App Domain B 抛出的异常。如果 App Domain B 抛出 包含在其应用程序下的程序集中的异常 base,但不在 App Domain A 的 application base 下,App Domain A 会 找不到异常,和公共语言运行时 将抛出 FileNotFoundException 异常。为了避免这种情况, 您可以部署包含异常信息的程序集 两种方式:

  • 将程序集放入由共享的公共应用程序库中 两个应用域。

  • 如果域不共享公共应用程序库,请使用强名称对包含异常信息的程序集进行签名 并将程序集部署到全局程序集缓存中。

【讨论】:

  • 感谢您的信息!这很有用。我已经从您链接到的页面中添加了相关引用,这是 StackOverflow 上的推荐程序。链接可能会更改,页面可能会被删除,因此我们尝试在此处保留信息的副本。当然,同时仍然提供源的链接和归属。这是一个有用的发现。
猜你喜欢
  • 2010-09-14
  • 2010-11-10
  • 2016-12-08
  • 1970-01-01
  • 2020-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多