Im Hintergrund nach Aktualisierungen suchen und diese Installieren

Sie können die Updatesuche natürlich auch im Hintergrund durchführen lassen und Ihre Benutzer nur Benachrichtigen, wenn auch wirklich Aktualisierungen verfügbar sind.

Dazu stellt Ihnen der updateController die Methode checkForUpdatesAsync zur Verfügung.

Mit dieser sucht der updateSytem.NET updateController automatisch im Hintergrund nach Aktualisierungen, ohne dabei die Ausführung Ihrer Anwendung zu unterbrechen.

Es gibt zwei Events welche von dieser Methode heraus gefeuert werden:

  • checkForUpdatesCompleted - Wird immer am Ende der Updatesuche aufgerufen und enthällt dabei evtl. aufgetretene Fehler.
  • updateFound - Wird nur aufgerufen wenn Aktualisierungen gefunden wurden und enthällt in den EventArgs das Updateresult.

Wurden Aktualisierungen gefunden wurden, können Sie diese auch im Hintergrund herunterladen lassen. Dazu gibt es im updateController die MethodedownloadUpdates.

Diese Methode feuert ebenfalls zwei Events:

  • downloadUpdatesProgressChanged - Wird aufgerufen, wenn sich der Fortschritt des Downloads ändert. Über die EventArgs ist der Gesammtfortschritt in Prozent zu entnehmen.
  • downloadUpdatesCompleted - Wird aufgerufen, wenn der Download abgeschlossen- oder durch einen Fehler unterbrochen wurde. Die Exception kann den EventArgs entnommen werden.

Ist die Updatesuche und der Download abgeschlossen, müssen Sie nur noch das Update anwenden, dies geschieht mit der Methode applyUpdate. Dazu noch relevant: Die Anwendung vor der Updateinstallation beenden.

Beispielcode

1 private void btnRunAsync_Click(object sender, EventArgs e) { 2 //Events einhängen 3 upctrlMain.checkForUpdatesCompleted += upctrlMain_checkForUpdatesCompleted; 4 upctrlMain.updateFound += upctrlMain_updateFound; 5 6 //Updatesuche anstoßen 7 upctrlMain.checkForUpdatesAsync(); 8 } 9 10 //Dieses Event wird in jedem Falle nach Abschluß der Updatesuche gefeuert. 11 //Also bei gefundenen Updates, keinen neuen Updates und auch im Fehlerfall. 12 private void upctrlMain_checkForUpdatesCompleted(object sender, checkForUpdatesCompletedEventArgs e) { 13 upctrlMain.checkForUpdatesCompleted -= upctrlMain_checkForUpdatesCompleted; 14 15 //Überprüfen ob ein Fehler auftrat: 16 if (e.Error != null) { 17 //könnte man auch ne MessageBox anzeigen, aber das ist jedem selber überlassen. 18 throw e.Error; 19 } 20 } 21 22 //Dieses Event wird ausschließlich gefeuert, wenn bei der Updatesuche neue Aktualisierungen gefunden wurden. 23 private void upctrlMain_updateFound(object sender, updateFoundEventArgs e) { 24 upctrlMain.updateFound -= upctrlMain_updateFound; 25 26 //Dem Benutzer anzeigen das es neue Updates gibt, dazu bauen wir uns erst den Changelog zusammen 27 var sbChangelog = new StringBuilder(); 28 foreach (updatePackage package in e.Result.newUpdatePackages) { 29 sbChangelog.AppendLine(string.Format("Änderungen in Version {0}:", package.releaseInfo.Version)); 30 sbChangelog.AppendLine(e.Result.Changelogs[package].germanChanges); 31 sbChangelog.AppendLine(); 32 } 33 34 //Neueste Version ermitteln 35 string latestVersion = e.Result.newUpdatePackages[e.Result.newUpdatePackages.Count - 1].releaseInfo.Version; 36 37 if ( 38 MessageBox.Show( 39 string.Format( 40 "Es ist für Ihre Anwendung eine neue Version verfügbar: {0}\r\nChangelog:\r\n{1}Möchten Sie das Update jetzt installieren?", 41 latestVersion, sbChangelog), "Testanwendung", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == 42 DialogResult.Yes) { 43 upctrlMain.downloadUpdatesCompleted += upctrlMain_downloadUpdatesCompleted; 44 upctrlMain.downloadUpdatesProgressChanged += upctrlMain_downloadUpdatesProgressChanged; 45 upctrlMain.downloadUpdates(); 46 } 47 } 48 49 //Event welches den Fortschritt des Downloads in % anzeigt. 50 private void upctrlMain_downloadUpdatesProgressChanged(object sender, downloadUpdatesProgressChangedEventArgs e) { 51 prgDownloadProgress.Value = e.ProgressPercentage; 52 } 53 54 //Event welches eintritt, wenn der Download fertig ist (tritt auch bei Fehlern ein!) 55 private void upctrlMain_downloadUpdatesCompleted(object sender, AsyncCompletedEventArgs e) { 56 upctrlMain.downloadUpdatesCompleted -= upctrlMain_downloadUpdatesCompleted; 57 upctrlMain.downloadUpdatesProgressChanged -= upctrlMain_downloadUpdatesProgressChanged; 58 59 //Überprüfen ob das Update durch einen Fehler oder den Benutzer abgebrochen wurde 60 if (e.Error != null) 61 throw e.Error; 62 63 //Download war erfolgreich, dann den Updateprozess starten 64 upctrlMain.applyUpdate(); 65 }

Dieser Code stammt aus unserem C# Beispielprojekt, wenn Sie in VB.NET entwickeln finden Sie hier das Beispielprojekt auch in VB.NET.