示例#1
0
        /// <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();
            }
        }
示例#2
0
        /// <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();
        }
示例#3
0
        /// <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;
        }
示例#4
0
        /// <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();
                }
            }
        }