c # aplicativo do console - evitar de diálogo de exceção padrão
-
20-08-2019 - |
Pergunta
Eu tenho aplicação simples com AppDomain único que é periodicaly lançado em um servidor. Às vezes não manipulado exceção ocorre na aplicação e padrão abort / repetição / pops diálogo ignorar-se. Eu preciso para evitar alguma forma o eDIALOG de mostrar e de saída apenas a exceção em StrErr e fechar a aplicação. Então eu fechado todo o código no método principal com instrução try-catch, mas isso não ajudou em tudo -. A caixa de diálogo de exceção ainda é mostrado às vezes
O Main () parece um código como este:
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);
}
Esta cláusula try-catch deviam capturar todas as exceções não tratadas e de diálogo exceção nunca deve aparecer AFAIK. Estou esquecendo de algo? Ou há qualquer definição (Registro etc) no servidor que controla um comportamento especial relacionado com o código de erro de diálogo exceção / aplicação?
Solução
Há um evento de exceção não tratada, você pode assinar no domínio do aplicativo.
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
}
Outras dicas
Você já considerou a possibilidade de que a sua cláusula catch pode haver exceções jogando? Você desova threads em seu aplicativo principal?