C# 콘솔 응용 프로그램 - 기본 예외 대화 상자 방지
-
20-08-2019 - |
문제
서버에서 주기적으로 실행되는 단일 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 절에서 예외가 발생할 가능성을 고려해 보셨나요?기본 앱에서 스레드를 생성합니까?
제휴하지 않습니다 StackOverflow