/// <summary> /// Exibe uma mensagem de erro ao usuário e gera relatórios de erros, salvos num arquivo /// Leonardo Costa 30/10/2015 /// </summary> /// <param name="ex">Exceção a ser relatada</param> /// <param name="mensagemUsuario">Mensagem a ser exibida ao usuário. Se o parâmetro não for passado, se for vazio, nulo, /// e a intensidade do erro for diferente de gravissimo, não será exibida a mensagem</param> /// <param name="intensidade">Intensidade do erro</param> public static void ExibirErro(Exception ex, string mensagemUsuario = "", IntensidadeErro intensidade = IntensidadeErro.Grave) { if (intensidade > intensity) { intensity = intensidade; } if (intensidade > 0 && salvarRelatoriosDeErros) { fila.Enqueue(ex); if (!recover.IsBusy) { recover.DoWork += recover_DoWork; recover.RunWorkerAsync(); recover.RunWorkerCompleted += recover_RunWorkerCompleted; } } string mensagem = mensagemUsuario; int numEx = 1; if (ExibeErrosProgramador) { mensagem += Environment.NewLine + "Exceção principal: " + ex.Message; if (ExibeDetalhesDeErros) { Exception inner = ex.InnerException; while (inner != null) { mensagem += Environment.NewLine + "Exceção interna " + numEx++ + ": " + inner.Message; inner = inner.InnerException; } } } else if (intensidade == IntensidadeErro.Gravissimo) { mensagem += Environment.NewLine + "Informe este código ao desenvolvedor do sistema: " + ((ex.HResult - 5) * 7); } if (!string.IsNullOrEmpty(mensagem)) { MessageBox.Show(mensagem, NomePrograma, MessageBoxButtons.OK, MessageBoxIcon.Error); } if (intensidade == IntensidadeErro.Gravissimo && !salvarRelatoriosDeErros) { Application.Restart(); } }
/// <summary> /// Exibe uma mensagem de erro ao usuário e gera relatórios de erros, salvos num arquivo /// Leonardo Costa 30/10/2015 /// </summary> /// <param name="ex">Exceção a ser relatada</param> /// <param name="mensagemUsuario">Mensagem a ser exibida ao usuário. Se o parâmetro não for passado, se for vazio, nulo, /// e a intensidade do erro for diferente de gravissimo, não será exibida a mensagem</param> /// <param name="intensidade">Intensidade do erro</param> public static void ExibirErro(Exception ex, string mensagemUsuario = "", IntensidadeErro intensidade = IntensidadeErro.Grave) { if (intensidade > intensity) intensity = intensidade; if (intensidade > 0 && salvarRelatoriosDeErros) { fila.Enqueue(ex); if (!recover.IsBusy) { recover.DoWork += recover_DoWork; recover.RunWorkerAsync(); recover.RunWorkerCompleted += recover_RunWorkerCompleted; } } string mensagem = mensagemUsuario; int numEx = 1; if (ExibeErrosProgramador) { mensagem += Environment.NewLine + "Exceção principal: " + ex.Message; if (ExibeDetalhesDeErros) { Exception inner = ex.InnerException; while (inner != null) { mensagem += Environment.NewLine + "Exceção interna " + numEx++ + ": " + inner.Message; inner = inner.InnerException; } } } else if (intensidade == IntensidadeErro.Gravissimo) mensagem += Environment.NewLine + "Informe este código ao desenvolvedor do sistema: " + ((ex.HResult - 5) * 7); if (!string.IsNullOrEmpty(mensagem)) MessageBox.Show(mensagem, NomePrograma, MessageBoxButtons.OK, MessageBoxIcon.Error); if (intensidade == IntensidadeErro.Gravissimo && !salvarRelatoriosDeErros) Application.Restart(); }
/// <summary> /// Exibe uma mensagem de erro ao usuário ou programador e gera relatórios de erros, salvos num arquivo. /// leonardoteck 07/02/2016 /// </summary> /// <param name="ex">Exceção a ser relatada</param> /// <param name="mensagemUsuario">Mensagem a ser exibida ao usuário. Se o parâmetro não for passado, se for vazio, nulo, /// e a intensidade do erro for diferente de gravissimo, não será exibida a mensagem</param> /// <param name="intensidade">Intensidade do erro</param> public static void ExibirErro(Exception ex, string mensagemUsuario = "", IntensidadeErro intensidade = IntensidadeErro.Grave) { if (intensidade > 0 && SalvarRelatoriosDeErros) { fila.Enqueue(ex); if (!recover.IsBusy) recover.RunWorkerAsync(); } string mensagem = mensagemUsuario; if (ModoProgramador) { mensagem += Environment.NewLine + Environment.NewLine + ConstruirMensagemErro(ex); bool perguntar = ex.InnerException != null; if (perguntar) mensagem += Environment.NewLine + "Deseja mais detalhes?"; bool detalhes = ExibirMensagem(mensagem, perguntar); if (detalhes && perguntar) { if (Configuracoes.TipoProjeto == TipoProjeto.Console) mensagem = Environment.NewLine + "Exceções internas:"; else mensagem = "Exceções internas:"; Exception inner = ex.InnerException; int numEx = 1; while (inner != null) { mensagem += Environment.NewLine + Environment.NewLine + "Ex. interna " + numEx++ + ": " + ConstruirMensagemErro(inner); inner = inner.InnerException; } if (!(intensidade > 0 && SalvarRelatoriosDeErros)) { mensagem += Environment.NewLine + Environment.NewLine + "Salvar relatório deste erro?"; bool salvar = ExibirMensagem(mensagem, true); if (salvar) { fila.Enqueue(ex); if (!recover.IsBusy) recover.RunWorkerAsync(); } } } } else { if (intensidade == IntensidadeErro.Gravissimo) mensagem += Environment.NewLine + "Contate o desenvolvedor do sistema e informe que houve um erro gravíssimo."; if (!string.IsNullOrEmpty(mensagem)) ExibirMensagem(mensagem, false); } if (intensidade == IntensidadeErro.Gravissimo && fila.Count == 0 && !recover.IsBusy && Reiniciar) { Process.Start(System.Reflection.Assembly.GetExecutingAssembly().CodeBase); Process.GetCurrentProcess().Kill(); } else VaiReiniciar = true; }
/// <summary> /// Exibe uma mensagem de erro ao usuário e gera relatórios de erros, salvos num arquivo /// Leonardo Costa 30/10/2015 /// </summary> /// <param name="ex">Exceção a ser relatada</param> /// <param name="mensagemUsuario">Mensagem a ser exibida ao usuário. Se o parâmetro não for passado, se for vazio, nulo, /// e a intensidade do erro for diferente de gravissimo, não será exibida a mensagem</param> /// <param name="intensidade">Intensidade do erro</param> public static void ExibirErro(Exception ex, string mensagemUsuario = "", IntensidadeErro intensidade = IntensidadeErro.Grave) { if (intensidade > intensity) intensity = intensidade; if (intensidade > 0 && salvarRelatoriosDeErros) { fila.Enqueue(ex); if (!recover.IsBusy) { recover.DoWork += recover_DoWork; recover.RunWorkerAsync(); recover.RunWorkerCompleted += recover_RunWorkerCompleted; } } string mensagem = mensagemUsuario; int numEx = 1; if (ExibeErrosProgramador) { /// Se o tipo for erro do banco de dados entity framework /// Então exibe os erros que ocorreram no banco de dados if (ex.GetType() == typeof(DbEntityValidationException)) { var enumerable = ((DbEntityValidationException)ex).EntityValidationErrors; foreach (var validationErrors in enumerable) { foreach (var validationError in validationErrors.ValidationErrors) { mensagem += Environment.NewLine + "Exceção do BD: " + validationError.ErrorMessage; } } } else { /// Se o erro não é do EntityFramework mensagem += Environment.NewLine + "Exceção principal: " + ex.Message; if (ExibeDetalhesDeErros) { Exception inner = ex.InnerException; while (inner != null) { mensagem += Environment.NewLine + "Exceção interna " + numEx++ + ": " + inner.Message; inner = inner.InnerException; } } } } else if (intensidade == IntensidadeErro.Gravissimo) mensagem += Environment.NewLine + "Informe este código ao desenvolvedor do sistema: " + ((ex.HResult - 5) * 7); if (!string.IsNullOrEmpty(mensagem)) MessageBox.Show(mensagem, NomePrograma, MessageBoxButton.OK, MessageBoxImage.Error); if (intensidade == IntensidadeErro.Gravissimo && !salvarRelatoriosDeErros) { var r = MessageBox.Show("Deseja reiniciar o programa?", NomePrograma, MessageBoxButton.YesNo, MessageBoxImage.Question); if (r == MessageBoxResult.Yes) { System.Diagnostics.Process.Start(Application.ResourceAssembly.Location); Application.Current.Shutdown(); } } }