public static void FazSeedSQLite()
        {
            //faz o seed dos modelos
            using (var db = new GeradorInstaladoresContext())
            {
                int modelosCadastrados = db.ModelosEquipamentos.Count();

                if (modelosCadastrados == 0)
                {
                    db.ModelosEquipamentos.Add(new ModeloEquipamento()
                    {
                        NomeModelo     = "RICOH Aficio MP C2050",
                        PastaDriverX86 = "mpc2050_x86",
                        PastaDriverX64 = "mpc2050_x64",
                        ArquivoINF     = "OEMSETUP.INF",
                        NomeDriver     = "RICOH Aficio MP C2050 PCL 5c"
                    });

                    db.ModelosEquipamentos.Add(new ModeloEquipamento()
                    {
                        NomeModelo     = "Ricoh MP 305",
                        PastaDriverX64 = "mp305_x64",
                        PastaDriverX86 = "mp305_x86",
                        ArquivoINF     = "OEMSETUP.INF",
                        NomeDriver     = "RICOH MP 305+ PCL 5e"
                    });

                    db.ModelosEquipamentos.Add(new ModeloEquipamento()
                    {
                        NomeModelo     = "RICOH Aficio MP 201",
                        PastaDriverX64 = "mp201_x64",
                        PastaDriverX86 = "mp201_x86",
                        ArquivoINF     = "OEMSETUP.INF",
                        NomeDriver     = "RICOH Aficio MP 201 PCL 5e"
                    });
                }

                int definicoesGravadas = db.DefinicoesGerais.Count();

                if (definicoesGravadas == 0)
                {
                    db.DefinicoesGerais.Add(new DefinicoesGerais()
                    {
                        PastaDrivers   = @"D:\temp\instaladorImpressoras",
                        PastaINNO      = @"C:\Program Files (x86)\Inno Setup 5",
                        Icone          = @"C:\temp\printer.ico",
                        AppName        = @"AppName",
                        TextoCabecalho = @"Company Name"
                    });
                }

                db.SaveChanges();
            }
        }
        private void Criador_OnMensagemProgresso(object sender, ProgressoEventArgs e)
        {
            string msg = e.Mensagem + "\r\n";

            using (var db = new GeradorInstaladoresContext())
            {
                var instalador = db.Instaladores.Find(e.IdInstalador);
                instalador.MensagensProgresso += msg;
                db.SaveChanges();
            }

            log.Info(msg);
        }
        public ObterExeInstalador(string IdInstalador)
        {
            using (var db = new GeradorInstaladoresContext())
            {
                var definicoes_gerais = (from d in db.DefinicoesGerais
                                         select d)
                                        .First();

                this._PastaDosExecutaveis = Path.Combine(definicoes_gerais.PastaDrivers, "Output");
                this._NomeInstalador      = db.Instaladores
                                            .Where(p => p.IdentificadorUnico == IdInstalador)
                                            .First()
                                            .ArquivoInstalador;
            }
        }
        private void Criador_OnConclusao(object sender, ProgressoEventArgs e)
        {
            string msg = "Instalador " + e.IdInstalador.ToString() + " concluído!";

            using (var db = new GeradorInstaladoresContext())
            {
                var instalador = db.Instaladores.Find(e.IdInstalador);
                instalador.Status              = (int)StatusCompilacao.Terminado;
                instalador.MensagensProgresso += msg;
                instalador.ArquivoInstalador   = e.Mensagem;
                db.SaveChanges();
            }

            log.Info(msg);
        }
        public Task Execute(IJobExecutionContext context)
        {
            try
            {
                log = (log4net.ILog)context.JobDetail.JobDataMap["log"];

                log.Info("JobCriaInstalador.Execute iniciado");

                string PastaDrivers, PastaINNO, AppName, TextoCabecalho, CaminhoIcone;

                //busca instaladores não iniciados
                using (var db = new GeradorInstaladoresContext())
                {
                    if (db.DefinicoesGerais.Count() == 0)
                    {
                        log.Error("Definicoes gerais não configuradas");
                        return(Task.CompletedTask);
                    }

                    var definicoes_gerais = (from d in db.DefinicoesGerais
                                             select d)
                                            .First();

                    PastaDrivers   = definicoes_gerais.PastaDrivers;
                    PastaINNO      = definicoes_gerais.PastaINNO;
                    AppName        = definicoes_gerais.AppName;
                    TextoCabecalho = definicoes_gerais.TextoCabecalho;
                    CaminhoIcone   = definicoes_gerais.Icone;

                    log.Info("PastaDrivers: " + PastaDrivers);
                    log.Info("PastaINNO: " + PastaINNO);
                    log.Info("AppName: " + AppName);

                    var instaladores = from i in db.Instaladores
                                       where i.Status == (int)StatusCompilacao.NaoIniciado
                                       select i;

                    log.Info("Instaladores novos: " + instaladores.Count().ToString());
                    foreach (var instalador in instaladores)
                    {
                        instalador.Status = (int)StatusCompilacao.Compilando;
                    }

                    db.SaveChanges();
                }

                Instalador[] instaladores_a_compilar;

                using (var db = new GeradorInstaladoresContext())
                {
                    //desabilita proxy pois os dados serão utilizados com a conexão fechada
                    db.Configuration.ProxyCreationEnabled = false;

                    instaladores_a_compilar =
                        db.Instaladores
                        .Include("Equipamentos")
                        .Include("Equipamentos.ModeloEquipamento")
                        .Where(p => p.Status == (int)StatusCompilacao.Compilando)
                        .ToArray();
                }

                //compila um por um
                log.Info("Instaladores a compilar: " + instaladores_a_compilar.Count().ToString());
                foreach (var instalador in instaladores_a_compilar)
                {
                    CriadorInstalador criador = new CriadorInstalador(instalador, PastaDrivers, PastaINNO, AppName, TextoCabecalho, CaminhoIcone);

                    criador.OnMensagemProgresso += Criador_OnMensagemProgresso;
                    criador.OnErro      += Criador_OnErro;
                    criador.OnConclusao += Criador_OnConclusao;

                    criador.CriaInstaladorINNO();
                }

                log.Info("JobCriaInstalador.Execute finalizado");
            }
            catch (Exception e)
            {
                //loga o erro, não é possível exibir nenhuma mensagem ao user, já que este job roda no background
                log.Error(e);
            }

            return(Task.CompletedTask);
        }