문제

서버에서 주기적으로 실행되는 단일 AppDomain을 사용하는 간단한 애플리케이션이 있습니다.때때로 응용 프로그램에서 처리되지 않은 예외가 발생하고 기본 중단/재시도/무시 대화 상자가 나타납니다.어떻게든 edialog가 표시되는 것을 방지하고 StrErr에 대한 예외를 출력하고 응용 프로그램을 닫아야 합니다.그래서 try-catch 문을 사용하여 기본 메서드의 모든 코드를 묶었지만 전혀 도움이 되지 않았습니다. 예외 대화 상자가 여전히 가끔 표시됩니다.

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를 팝업해서는 안 됩니다.뭔가 빠졌나요?아니면 예외 대화 상자/응용 프로그램 오류 코드와 관련된 일부 특별한 동작을 제어하는 ​​설정(레지스트리 등)이 서버에 있습니까?

도움이 되었습니까?

해결책

애플리케이션 도메인에서 구독할 수 있는 처리되지 않은 예외 이벤트가 있습니다.

    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
    }

다른 팁

catch 절에서 예외가 발생할 가능성을 고려해 보셨나요?기본 앱에서 스레드를 생성합니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top