//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); } } }
//PQP consegui /// <summary> /// Copia todo conteúdo do diretório para outro /// </summary> /// <param name="source"></param> /// <param name="tarjet"></param> public void UpdateSoftware(string source, string tarjet) { //encapsulado pro ITE FileManagerIts.DirectoryCopy(source, tarjet); }