Esempio n. 1
0
        /// <summary>
        /// Task de atualização
        /// </summary>
        private async Task ExecuteAsync(bool backup, bool vacuum, bool reindex)
        {
            await Task.Run(async() =>
            {
                try
                {
                    SetaBarraStatus(true, 0);

                    //-- Verifica se existe informação para atualizar
                    TelaPrincipal.AbaAtualizacao.LabelContent = "Buscando versões do sistema...";

                    if (!await BuscaVersoes())
                    {
                        throw new Exception("Problemas com a comunicação com o servidor ftp");
                    }

                    //if (AtualizarModel.Versao < UltimaVersao)
                    //{
                    //-- Ativa manutenção no banco, GeneXus se encarregará de indicar manutenção
                    if (!await ManutencaoAtiva())
                    {
                        throw new Exception("Problemas com a comunicação com o banco de dados.");
                    }

                    var context = new PostoContext(ConfiguracaoModel);

                    //-- Inicia a atualização
                    TelaPrincipal.AbaAtualizacao.ProgressoBarra2 = 0;
                    TelaPrincipal.AbaAtualizacao.LabelContent    = "Iniciando atualização...";

                    context.BeginTransaction();

                    //-- Encerra o processo do leitor de bombas caso parâmetro seja true
                    if (ConfiguracaoModel.LeitorBomba)
                    {
                        Process[] processes = Process.GetProcessesByName("uLeitor");
                        foreach (Process process in processes)
                        {
                            process.Kill();
                        }
                    }

                    //-- Encerra o processo do posto web caso parâmetro seja true
                    if (ConfiguracaoModel.PostoWeb)
                    {
                        Process[] processes = Process.GetProcessesByName("uPostoWe");
                        foreach (Process process in processes)
                        {
                            process.Kill();
                        }
                    }

                    TimerProximaAtualizacao.Stop();

                    if (!await AtualizaViewModel())
                    {
                        throw new Exception("Problemas ao atualizar informações do programa.");
                    }

                    TelaPrincipal.AbaAtualizacao.ProgressoBarra2 = 10;

                    //-- Roda os Rmenu de acordo com a versão
                    if (!await AtualizarSql(context, backup))
                    {
                        throw new Exception("Problemas ao rodar o rmenu.");
                    }

                    if (vacuum)
                    {
                        TelaPrincipal.AbaAtualizacao.ProgressoBarra2 = 32;

                        //-- Roda comando de Vacuum no banco de dados
                        if (!await ExecutaVacuum())
                        {
                            throw new Exception("Ocorreu um erro ao tentar rodar o comando de vacuum no banco de dados.");
                        }
                    }

                    if (reindex)
                    {
                        TelaPrincipal.AbaAtualizacao.ProgressoBarra2 = 40;

                        //-- Roda comando de Reindex no banco de dados
                        if (!await ExecutaReindex())
                        {
                            throw new Exception("Ocorreu um erro ao tentar rodar o comando de reindex no banco de dados.");
                        }
                    }

                    TelaPrincipal.AbaAtualizacao.ProgressoBarra2 = 50;

                    //-- Baixa os arquivos do FTP e extrai na pasta Update
                    if (!await AtualizarExe())
                    {
                        throw new Exception("Problemas com o download dos arquivos.");
                    }

                    TelaPrincipal.AbaAtualizacao.ProgressoBarra2 = 80;

                    //-- Atualiza o parversao no banco
                    if (!await AtualizarBanco(context))
                    {
                        throw new Exception("Problemas ao atualizar o banco de dados.");
                    }

                    if (!await ManutencaoDesativa())
                    {
                        throw new Exception("Problemas ao finalizar a manutenção.");
                    }

                    SetTime();
                    TimerProximaAtualizacao.Stop();
                    TelaPrincipal.AbaAtualizacao.LabelContent    = "Atualizado com sucesso.";
                    TelaPrincipal.AbaAtualizacao.ProgressoBarra2 = 100;
                    ReinicializaProgramas(false, context);
                }
                catch (Exception e)
                {
                    log.Error(e.Message);
                    TelaPrincipal.AbaAtualizacao.LabelContent = "Problemas ao atualizar.";
                    ReinicializaProgramas(true, null);
                }
            });
        }