private void XFrmApplyPackage_FormClosed(object sender, FormClosedEventArgs e) { if (Directory.Exists(_resourceDir)) { FileManagerIts.DeleteDirectory(_resourceDir); } }
//Estou considerando que o pacote .zip é um pacote com dlls private void updateDLLs() { try { //pkg do arquivo zip var pkg = this._pacote.Anexos.FirstOrDefault(); //nome do arquivo zip string zipResource = pkg.FileName; //extraindo atualização taskLog("Iniciando atualização: " + zipResource); if (Directory.Exists(_resourceDir)) { zipResource = _resourceDir; } else { //raiz da instalação var raiz = Path.GetPathRoot(_installDir); //garante que o root de instalação e atualização sejam são iguais //a atualização sera extraida no mesmo o root "=> Volume do disco Ex: C: //Deve ser o mesmo root onde esta a instalação do programa string resourceDir = Path.Combine(Path.GetPathRoot(raiz), "ite_package_update_" + Guid.NewGuid()); //cria o temporario para receber a atualização FileManagerIts.CreateDirectory(resourceDir); //agora eu tenho um diretorio entao gere um arquivo .zip zipResource = resourceDir + "\\" + zipResource; //gera o zip em disco FileManagerIts.WriteBytesToFile(zipResource, pkg.DataFile); //extrai as atualizações pra um temporario ZipUtil.ExtractToDirectory(zipResource, resourceDir); } taskLog("Salvando instalação atual ..."); //garante que exista somente um .bak FileManagerIts.DeleteDirectory(_installDir + ".bak"); //faz a copia o da instalaçao atual FileManagerIts.DirectoryCopy(_installDir, _installDir + ".bak"); taskLog("Diretório pronto para receber atualização ..."); taskLog("Atualizando diretórios e dlls ... "); Task.Run(new Action(() => { foreach (var f in new FileManagerIts().ToFilesRecursive(_resourceDir)) { //vo mostrar so o nome o temporario q gerei nao eh importante taskLog("Atualizando: " + Path.GetFileName(f)); } })); //ilustrar dps _taskManager.UpdateSoftware(_resourceDir, _installDir); //apague o temporário FileManagerIts.DeleteDirectory(_resourceDir); } catch (Exception ex) { try { cancelation(); taskLog("Falha no pacote de atualizações"); taskLog(ex.Message); LoggerUtilIts.ShowExceptionLogs(ex, this); } catch (OperationCanceledException oc) { Console.WriteLine("Operação cancelada=> " + oc.Message); } } }
private void loadPackage(Package pacote) { this._pacote = pacote; this.wizardControl1.SelectedPageIndex = 1; try { groupControlInfoPackage.Visible = true; if (pacote.DataPublicacao.HasValue) { lbDtPublish.Text = pacote.DataPublicacao.Value.ToShortDateString(); labelControl6.Text = pacote.NumeroPacote; memoEditDesc.Text = pacote.Descricao; if (pacote.Anexos.Any(a => a.Extensao == ".zip")) { var firstPkg = pacote.Anexos.FirstOrDefault(); string zipName = firstPkg.FileName; //crie um temporario para receber os dados do pacote this._resourceDir = Path.Combine(Path.GetTempPath(), Path.GetFileNameWithoutExtension(zipName)); FileManagerIts.DeleteDirectory(_resourceDir); FileManagerIts.CreateDirectory(_resourceDir); try { //arquivo zip string zipFile = Path.Combine(Path.GetTempPath(), zipName); //gera o zip em disco FileManagerIts.WriteBytesToFile(zipFile, firstPkg.DataFile); //extrai os dados pro temporario ZipUtil.ExtractToDirectory(zipFile, this._resourceDir); //todos os arquivos foreach (string item in FileManagerIts.ToFiles(this._resourceDir, new string[] { ".sql" }, true)) { if (item.EndsWith(".sql")) { _containsSql = true; } else if (item.EndsWith(".dll")) { _containsDll = true; } } //ja extrai o pacote e nao preciso dele no disco, os dados ja foram extraidos FileManagerIts.DeleteFile(zipFile); } catch (Exception ex) { string msg = "Falha na verificação de integridade do pacote."; XMessageIts.ExceptionMessageDetails(ex, msg); LoggerUtilIts.GenerateLogs(ex, msg); } } else { int countSql = pacote.Anexos.Count(a => a.Extensao == ".sql"); int countDll = pacote.Anexos.Count(a => a.Extensao == ".dll"); this._containsSql = countSql > 0; this._containsDll = countDll > 0; } this.pnlSql.Visible = _containsSql; if (_containsDll) { this.pnlDlls.Visible = true; detectInstallDir(); //this.groupControlInfoPackage.Location = new Point(17, 251); //this.groupControlInfoPackage.Size = new Size(806, 242); } else { this.pnlDlls.Visible = false; //this.groupControlInfoPackage.Location = new Point(17, 159); //this.groupControlInfoPackage.Size = new Size(806, 344); } wizardPage1.AllowNext = true; } else { XMessageIts.Erro("O pacote selecionado não foi publicado e não pode ser aplicado."); } } catch (Exception ex) { string msg = "O pacote de atualização informado é inválido!" + "\n\nContate o administrador para aplicar atualização."; XMessageIts.ExceptionMessageDetails(ex, msg, "Atenção"); LoggerUtilIts.GenerateLogs(ex, msg); } }