2009-06-26 5 views
7

У меня есть простое приложение с одним AppDomain, которое периодически запускается на сервере. Иногда в приложении появляется необработанное исключение, и появляется всплывающее диалоговое окно abort/retry/ignore по умолчанию. Мне нужно каким-то образом предотвратить показ edialog и просто вывести исключение на StrErr и закрыть приложение. Таким образом, я включил весь код в основной метод с помощью команды try-catch, но это совсем не помогло - иногда отображается диалог исключений.Приложение C# console - предотвращает диалог по умолчанию по умолчанию

Кода 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); 
} 

Это примерка поймать Шоуд поймать все необработанные исключения и диалоговое исключение не должен всплывать AFAIK. Я что-то упускаю? Или есть ли какой-либо параметр (реестр и т. Д.) На сервере, который контролирует какое-то особое поведение, связанное с кодом ошибки диалога/приложения?

+0

Вы говорите о взломе в необработанные исключения? – abhilash

ответ

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 
    } 
+0

Черт, слишком медленно. ;-) –

+1

Я печатал яростно, lol :-) –

+0

Я раньше не выполнял какую-либо работу с приложениями, я просто знаю, что мои приложения выполняются внутри одного ... Будет ли этот код улавливать исключения, которые срабатывают из разных потоков? –

0

Рассматривали ли вы возможность того, что ваше предложение catch может вызывать исключения? Вы создаете темы в главном приложении?

+1

нет других тем - только основная тема. Единственная возможность, которую может вызвать предложение catch, я вижу теперь, когда exc.StackTrace == null. – Buthrakaur

Смежные вопросы