private void UploadAppUpdates_Click(object sender, EventArgs e) { var filesNames = new Dictionary <AppArchitecture_t, string> { { AppArchitecture_t.Win7SP1, WIN7SP1_UPDATE_FILENAME }, { AppArchitecture_t.Win7SP1X64, WIN7SP1X64_UPADTE_FILENAME }, { AppArchitecture_t.WinXP, WINXP_UPADTE_FILENAME } }; var waitDlg = new Jobs.ProcessingDialog(); Action run = () => { KeyIndexer ndxer = AppContext.AccessPath.GetKeyIndexer(InternalTablesID.APP_UPDATE); var seq = (from AppUpdate up in ndxer.Source.Enumerate() where up.DeployTime == AppUpdate.NOT_YET select up).ToArray(); //maj app manifest + manifest global Dictionary <AppArchitecture_t, string> appManifest; try { appManifest = UpdateEngin.ReadAppManifest(AppPaths.AppManifestPath); } catch (Exception ex) { TextLogger.Warning(ex.Message); appManifest = new Dictionary <AppArchitecture_t, string>(); } IUpdateManifest gManifest; try { gManifest = UpdateEngin.ReadUpdateManifest(AppPaths.ManifestPath); } catch (Exception ex) { TextLogger.Warning(ex.Message); gManifest = new UpdateManifest(0, 0); } var netEngin = new NetEngin(AppContext.Settings.NetworkSettings); foreach (AppUpdate up in seq) { gManifest.Versions[up.AppArchitecture] = up.Version; appManifest[up.AppArchitecture] = filesNames[up.AppArchitecture]; string srcFileName = up.ID.ToString("X"); string destFileName = filesNames[up.AppArchitecture]; string dst = Urls.AppUpdateDirURL + destFileName; waitDlg.Message = $"Transfert du fichier {destFileName}. Cette opération peut durer plusieurs minutes."; netEngin.Upload(dst, Path.Combine(AppPaths.AppUpdateFolder, srcFileName)); up.DeployTime = DateTime.Now; ndxer.Source.Replace(ndxer.IndexOf(up.ID), up); } waitDlg.Message = "Transfert du manifest des applications..."; UpdateEngin.WriteAppManifest(AppPaths.AppManifestPath, appManifest); netEngin.Upload(Urls.AppManifestURL, AppPaths.AppManifestPath); waitDlg.Message = "Transfert du manifest global..."; UpdateEngin.WriteUpdateManifest(gManifest, AppPaths.ManifestPath); netEngin.Upload(Urls.ManifestURL, AppPaths.ManifestPath); }; Action onSucces = () => { m_tsbUploadAppUpdates.Enabled = false; waitDlg.Dispose(); }; Action <Task> onErr = t => { waitDlg.Dispose(); this.ShowError(t.Exception.InnerException.Message); TextLogger.Error(t.Exception.InnerException.Message); }; var task = new Task(run, TaskCreationOptions.LongRunning); task.OnSuccess(onSucces); task.OnError(onErr); task.Start(); waitDlg.ShowDialog(this); }
public static void UpdateApp() { //dl global manifest Log.LogEngin.PushFlash("Rechercher d'une mise à jour de l'application..."); const string logTxt = "Rechercher d'une mise à jour de l'application. "; string tmpFile = Path.GetTempFileName(); using (new AutoReleaser(() => File.Delete(tmpFile))) try { var netEngin = new NetEngin(Program.NetworkSettings); netEngin.Download(tmpFile, Urls.ManifestURL); IUpdateManifest updateManifest = UpdateEngin.ReadUpdateManifest(tmpFile); Version curVer = Assembly.GetExecutingAssembly().GetName().Version; Version ver = updateManifest.GetAppVersion(Program.AppArchitecture); if (ver == null || curVer.CompareTo(ver) >= 0) { Log.LogEngin.PushFlash("Vous disposez déjà de la dernière version de l’application."); Program.DialogManager.PostLog(logTxt + "Pas de nouvelle mise à jour", false); return; } Log.LogEngin.PushFlash($"Une nouvelle version de l'application est disponible ({ver})."); Program.DialogManager.PostLog(logTxt + $"Une nouvelle version de l'application est disponible, version: ({ver})", false); const string setupTxtLog = "L'utilsateur a refuser d'installer la nouvelle version du HUB"; if (CanDownlaodAppUpdate?.Invoke() != true) { Program.DialogManager.PostLog(setupTxtLog, false); return; } Log.LogEngin.PushFlash($"Téléchargement de la mise à jour..."); //dl app manifest netEngin.Download(tmpFile, Urls.AppManifestURL); Dictionary <AppArchitecture_t, string> upFiles = UpdateEngin.ReadAppManifest(tmpFile); string fileName = upFiles[Program.AppArchitecture]; //dl update file var url = Urls.AppUpdateDirURL + fileName; netEngin.Download(tmpFile, url); if (CanRunAppUpdate?.Invoke() != true) { Program.DialogManager.PostLog(setupTxtLog, false); return; } string tmpDir = Path.GetTempPath(); new FilesBag().Decompress(tmpFile, tmpDir); System.Diagnostics.Process.Start(Path.Combine(tmpDir, "setup.exe")); Program.DialogManager.PostLog("Lancement du programme d'installation de la mise à jour du HUB", false); System.Windows.Forms.Application.Exit(); } catch (Exception ex) { Dbg.Log("App update: " + ex.Message); } }