8

我有一个带有单个 AppDomain 的简单应用程序,它在服务器上定期启动。有时应用程序中会出现未处理的异常,并弹出默认的中止/重试/忽略对话框。我需要以某种方式阻止显示对话框,只在 StrErr 上输出异常并关闭应用程序。所以我用 try-catch 语句将所有代码包含在 main 方法中,但它根本没有帮助 - 有时仍然会显示异常对话框。

Main() 代码如下所示:

try
{
    RunApplication();
}
catch (Exception exc)
{   
    Console.Error.WriteLine(exc.ToString());
    Console.Error.WriteLine(exc.StackTrace);
    if (exc.InnerException != null)
    {
       Console.Error.WriteLine(exc.InnerException.ToString());
       Console.Error.WriteLine(exc.InnerException.StackTrace);
    }
    Environment.Exit(666);
}

这个 try-catch 子句应该捕获所有未处理的异常,并且异常对话框不应该弹出 AFAIK。我错过了什么吗?或者服务器上是否有任何设置(注册表等)控制与异常对话框/应用程序错误代码相关的一些特殊行为?

4

2 回答 2

20

您可以在应用程序域中订阅未处理的异常事件。

    public static void Main()   
    {   
        AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(OnUnhandledException);

        //some code here....
    }   

    /// <summary>
    /// Occurs when you have an unhandled exception
    /// </summary>
    public static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)   
    { 
        //here's how you get the exception  
        Exception exception = (Exception)e.ExceptionObject;  

        //bail out in a tidy way and perform your logging
    }
于 2009-06-26T08:48:20.487 回答
0

您是否考虑过您的 catch 子句可能引发异常的可能性?您是否在主应用程序中生成线程?

于 2009-06-26T08:49:15.167 回答