Was ist der beste Weg, um eine Windows-Anwendung automatisch zu aktualisieren? [geschlossen]

70

Google Chrome aktualisiert sich automatisch alle fünf Stunden . Ich möchte genau diese Funktionalität in meiner eigenen Anwendung klonen. Was ist der beste Weg, um diese Funktionalität unter Windows zu implementieren?

John Shedletsky
quelle
9
Machen Sie es eine Webapp? :)
Michael Aaron Safyan
4
Führen Sie Ihren Update-Code alle 5 Stunden aus?
Mikhail
Lassen Sie mich wissen, wenn ich etwas in meiner Antwort verpasst habe.
Cosmin

Antworten:

83

Um dieses Update-Verhalten zu replizieren, benötigen Sie zwei Dinge:

  1. Eine Updater-Anwendung, die regelmäßig nach Updates sucht. Wenn ein Update gefunden wird, sollte es automatisch installiert werden. Die meisten kommerziellen Setup-Authoring-Tools enthalten gute Updater-Anwendungen. Sie können versuchen, selbst einen Updater zu schreiben, aber es ist nicht so einfach, wie es sich anhört.

  2. Installationen pro Benutzer für jede Ihrer Produktversionen. Bei einer Installation pro Benutzer werden Daten nur in den Benutzerprofilordner (AppData, Roaming-Ordner usw.) und in HKEY_CURRENT_USER geschrieben. Keine Programmdateien oder HKEY_LOCAL_MACHINE.

Installationen pro Benutzer sind erforderlich, damit Sie das Upgrade unbeaufsichtigt durchführen können. Wenn die Installation pro Computer erfolgt, wird in der neueren Windows-Version die Aufforderung zur Erhöhung angezeigt, und der Benutzer weiß nicht, was passiert.

Der Updater

Einige Updater verwenden Dienste. Für automatisierte Updates ist dies keine echte Lösung, da für die Dienstinstallation Administratorrechte erforderlich sind. Ihr Installationsprozess und nachfolgende Updates zeigen also Aufforderungen zur Erhöhung an.

Ein anderer Ansatz ist die Verwendung einer Updater-Anwendung pro Benutzer. Es erfordert keine Erhebung und kann im Anwendungsordner installiert werden. Diese Art von Updater kann entweder als geplante Aufgabe oder in Ihrer Anwendung ausgeführt werden (führen Sie sie aus, wenn Ihre Anwendung gestartet wird).

In beiden Szenarien müssen Sie berücksichtigen, dass der Updater sich möglicherweise selbst aktualisieren muss. Der Prozess, der das Update ausführt, muss also ein temporärer Prozess sein (z. B. eine temporäre Kopie der Updater-Anwendung). Es sollte auch ohne Höhe laufen. Deshalb ist ein Service keine so gute Idee. Es müsste sich vor dem Update selbst stoppen, einen temporären Prozess verwenden, der das Update behandelt, und nach Abschluss erneut starten.

Andere Dinge zu beachten sind:

  • Berechtigungsprobleme (wenn der Aktualisierungsprozess Berechtigungen oder Erhöhungen benötigt)
  • Speicherorte herunterladen
  • Update-Erkennungsmechanismus (wie der Updater erkennt, ob eine neue Version installiert werden soll oder nicht)

Die Updates

Ein häufiges Missverständnis ist, dass Updates die Anwendungsdateien sein sollten (wie die Hauptanwendung EXE). Dies ist selten der Fall, da ein Update möglicherweise mehr als nur eine Datei überschreiben muss.

Die meisten Updates sind Installationspakete (z. B. MSI) oder Patches (MSP). Dies ist der beste Ansatz, da sie die gesamte Aktualisierungslogik verarbeiten:

  • laufende Anwendungen erkennen
  • Ressourcen aktualisieren
  • Aktualisieren Sie die Produktinformationen (Verknüpfungen, Applet Programme und Funktionen in der Systemsteuerung usw.).

Installationspakete vereinfachen auch die Updater-Anwendung. Bei dieser Art von Updates muss der Updater nur verfügbare Updates erkennen, herunterladen und ausführen.

Updates funktionieren auf zwei Arten:

Windows Installer bietet eine hervorragende Unterstützung für beide, sodass Sie MSI-Pakete und MSP-Patches verwenden können . Es werden auch unbeaufsichtigte Installationen unterstützt, sodass Ihr Updater das Paket lediglich mit einem Befehlszeilenparameter ausführen muss.

Diese Pakete unterstützen auch Installationen pro Benutzer oder pro Computer über die ALLUSERS- Eigenschaft.

Verteilung aktualisieren

Nachdem Sie sich für einen Updater und einige Update-Pakete entschieden haben, benötigen Sie auch einen Verteilungsmechanismus:

  • eine Möglichkeit, den Updater darüber zu informieren, dass Updates verfügbar sind (z. B. eine Update-Informationsdatei auf Ihrem Server)
  • eine Möglichkeit zu erkennen, ob ein Update installiert ist oder nicht (es wird also nur einmal installiert)

All dies ist nicht sehr einfach. Aus diesem Grund verwenden viele Produkte Updater von Drittanbietern. Sogar einige kommerzielle Setup-Authoring-Tools bieten Updater für Ihre Pakete an.

Ein benutzerdefinierter Updater wird hauptsächlich von sehr großen Unternehmen mit vielen Produkten verwendet, da sich die Investition für sie lohnt.

cosmin
quelle
10
Ein Kommentar: Ich würde vorschlagen, ein dauerhaftes Updater-Programm zu vermeiden und es stattdessen in regelmäßigen Abständen mit dem Taskplaner auszuführen.
Aaron Klotz
Tolle Antwort ... aber was ist mit plattformübergreifenden Anforderungen?
Mr. Boy
Normalerweise ist die Client-Updater-Anwendung plattformspezifisch. Sie benötigen also für jede Plattform einen anderen Updater. Der Serverteil ist für alle Plattformen gleich.
Cosmin
@CosminPirvu Aber MSP ist zu schwierig, um es zuverlässig zu verwenden, und oft ist das gesamte MSI-Paket (einschließlich Cab-Dateien) zu groß, um über das Internet bereitgestellt zu werden. Daher denke ich, dass keine der beiden oben vorgeschlagenen Methoden zur Aktualisierung für mich geeignet ist. Wie denkst du darüber?
Himmel
Leider sind MSP-Patches die einzige Art von kleinen Updates, die bei MSI-basierten Installationen sofort funktionieren. Sie funktionieren nur für geringfügige Änderungen (z. B. einige Dateien). Sie funktionieren jedoch, wenn Sie nicht versuchen, viel Installationslogik in sie aufzunehmen. Die Alternative besteht darin, eigene Installationsprogramme und Updates zu erstellen. Und das ist normalerweise keine leichte Aufgabe.
Cosmin
27

Wenn Sie genau die gleiche Funktionalität haben möchten, können Sie. Google hat es als Open-Source-Lösung bereitgestellt.

https://github.com/google/omaha

Tim Cooper
quelle
1
Es scheint jedoch, dass dieses Projekt nicht mehr aktualisiert wird ...
Bob Cromwell
Gibt es ein Update zu diesem Projekt? Ich habe versucht, dies zu verwenden, aber es ist sehr schwierig zu konfigurieren und es sieht so aus, als ob dieses Projekt von Google eingestellt wurde. Irgendwelche Einsichten?
Pritesh Acharya
In letzter Zeit wurden weitere Updates veröffentlicht. Es wurde definitiv nicht eingestellt. Ich denke, Google entwickelt es nur im eigenen Haus und veröffentlicht das, was es intern hat, "langsam" für die Öffentlichkeit. @PriteshAcharya Ich habe ein Tutorial geschrieben, das die Konfiguration erleichtern soll: fman.io/blog/google-omaha-tutorial
Michael Herrmann
4

Versuchen Sie es mit winsparkle - https://github.com/vslavik/winsparkle . Es ist eine C ++ - Bibliothek.

YN
quelle
Handelt dies die Aktualisierung einer App, die als Dienst ausgeführt wird? Ich habe einiges davon gelesen, aber diese Funktion nicht gesehen.
user2568374