Selbstaktualisierende Anwendung - Philosophie

15

Dies ist eine philosophische Frage.

Bei einer hypothetischen Desktop-Anwendung und dem Wunsch, automatische Aktualisierungen bereitzustellen (anstatt die Benutzer zu zwingen, eine Website zu besuchen, nach Aktualisierungen zu suchen, Aktualisierungen herunterzuladen und zu installieren), ist welche der beiden Vorgehensweisen eher eine "bewährte Vorgehensweise"?

  1. Wie bei iTunes wird geprüft, ob eine neue Version vorhanden ist, und der Benutzer wird aufgefordert, die neue Version herunterzuladen. In diesem Fall wird eine ausführbare Vollinstallationsdatei (in diesem Fall eine Windows Installer- Datei (.msi)) heruntergeladen, mit der die Vollversion installiert wird (nicht nur ein Upgrade auf die vorherige Version - zu viel für die Verwaltung, wenn mehrere Versionen vorhanden sind). . Angenommen, es ist Version 10.1.1. Unabhängig davon, ob Sie eine Neuinstallation oder ein Upgrade durchführen, verwenden Sie dieselbe Datei. Nach dem Herunterladen wird der Benutzer angewiesen, die Anwendung zu schließen und die Installationsdatei selbst auszuführen.

  2. Ähnlich wie bei der anderen wird nach einer neuen Version gesucht und der Benutzer zum Herunterladen aufgefordert. Statt jedoch nur eine ausführbare Datei herunterzuladen und den Benutzer zum Ausführen aufzufordern, wird sie tatsächlich für ihn ausgeführt - das geöffnete Programm wird heruntergefahren und angefordert die notwendige Sicherheit, um Dateien zu installieren.

Probleme mit # 2: Viele Probleme beim Beenden des Programms, da das Programm andere Programme ( Outlook und Excel ) öffnen kann , oder was ist, wenn der Benutzer in der Mitte von etwas war. Um die Sicherheit zu gewährleisten, benötigen Sie lokalen Administratorzugriff für die Installation. Was tun, wenn Sie keinen haben? In späteren Versionen von Windows können Sie die Sicherheit der Person nicht einfach außer Kraft setzen.

Probleme mit Nummer 1: Einige Leute glauben, dass dies für den Endbenutzer zu schwierig und zu anstrengend sein wird.

Ich würde es sehr bevorzugen, mit Nummer 1 fortzufahren, da dadurch 80-120 Stunden für mein Projekt eingespart werden und die Implementierung und Wartung einfacher ist. Wir haben jedoch Menschen, die sich von allen Seiten stark fühlen.

Was ist eine bewährte Methode für diese Art von Dingen?

Shannon Davis
quelle
Ich bin mir nicht so sicher, ob es philosophisch ist. Klingt so, als würde sie nach einer Lösung für mich suchen.
Es ist also nicht in Ordnung, hier Fragen zu Design / Architektur zu stellen?
Meine Frage ist, warum # 2 erfordert, dass das Programm heruntergefahren und neu gestartet wird? Wenn es sich um ein Sicherheitsupdate handelt, ist das verständlich, aber ein normaler Benutzer schließt ein Programm mindestens einmal am Tag und öffnet es erneut, wenn nicht mehr. Warum nicht im Hintergrund installieren? Lassen Sie den Benutzer das Programm mit der älteren Version im Arbeitsspeicher ausführen Verwenden Sie beim Neustart die neu installierte Version. Keine Aufregung, kein Ärger.
Mike S
@Mike S: Dies ist unter Windows nicht möglich (ausführbare Dateien, die ausgeführt werden, können nicht überschrieben werden), und selbst unter Linux ist dies keine besonders gute Idee (wenn Sie eine andere Instanz öffnen, wird eine den alten Code und eine den neuen Code ausführen) - Wenn ein IPC stattfindet, ist es noch schlimmer)
Dean Harding
Aus Erfahrung: Wenn Sie nach Updates suchen, lassen Sie Ihr Programm dies nicht täglich um Mitternacht oder 15:00 Uhr tun. Das scheint vernünftig, aber Sie beenden das DDOS-Verfahren für Ihre eigenen Server. Addieren Sie einfach bis zu 3600 Sekunden Zufälligkeit. es ist nicht so dringend.
MSalters

Antworten:

20

Persönlich mag ich den Ansatz von Google Chrome eher. Ein Basisverzeichnis mit einem Startprogramm und Unterverzeichnissen für jede installierte Version der Software. Der Launcher sucht nur nach der höchsten Versionsnummer und verwendet diese und löscht ältere Versionen nach Bedarf. Von Zeit zu Zeit wird eine Updater-Task ausgeführt, um neue Verzeichnisse herunterzuladen und zu erstellen. Wenn neue Versionen installiert werden, fordert die ausgeführte Anwendung einen Neustart an, um die neue Version zu verwenden.

Speckwürfel
quelle
4
+1 für das Hervorheben von Googles gutem Verhalten. Der Kontrast ist Adobe Acrobat Reader, der wie jeden 2. Tag einige scheinbar dringende Patches installiert und einen ständig in seiner Arbeit stört.
Ingo
Ich mag diesen Ansatz auch. Der Nachteil ist, dass es nur für Einzelbenutzerinstallationen funktioniert, für die keine Erhöhung erforderlich ist. Sobald Sie eine Eingabeaufforderung für die Höhe erhalten haben, spielt es keine Rolle mehr, ob Sie noch ein paar Klicks benötigen, um das Update durchzuführen (es ist nicht mehr still).
@Cosmin Wenn Sie% appdata% nicht verwenden möchten, können Sie% ProgramData% zum Speichern der heruntergeladenen Dateien verwenden. Philosophisch korrekter wäre es, das Archiv dort zu speichern und es dann beim nächsten Start des Programms zu installieren.
Bacon Bits
LIEBE diese Antwort und ich stecke sie in meine Hosentasche (vorerst hat der Download im "Itunes" -Stil aus Kostengründen großen Anklang gefunden.)
Shannon Davis,
3

Sie sollten keine unnötigen Starteinträge erstellen, um nach Updates wie Adobe Flash Player zu suchen (es ist schwierig, sie alle aufzuspüren, und ich kann keine Möglichkeit finden, die Überprüfungen zu deaktivieren ...) oder iTunes. Es ärgert den Benutzer (Geeks, sowieso). Eine bessere Option wäre, beim Start der Anwendung nach Updates zu suchen, wie dies bei Firefox der Fall ist .

Ein einfaches, nicht aufdringliches "Updates installieren?" Fenster wird Benutzer nicht stören. Lassen Sie es im Hintergrund aktualisieren, während der Benutzer andere Aufgaben ausführt, und starten Sie dann automatisch Ihre Anwendung.

Stellen Sie einfach sicher, dass Sie eine Option hinzufügen:

Suchen Sie nach Updates bei:

  • Einloggen (wenn du Geeks nerven willst)
  • Anwendungsstart ( auf Standardeinstellung)
  • Alle paar Wochen ( off in der Standardeinstellung)

Oder etwas ähnliches.


Wenn es die Mühe wert ist, würde ich sagen, machen Sie es. Das ist deine Entscheidung.

Mateen Ulhaq
quelle
2

Ich denke, Sie möchten ein "ClickOnce" -Setup.

http://msdn.microsoft.com/en-us/library/142dbbz4(v=vs.90).aspx

ClickOnce ist eine Bereitstellungstechnologie, mit der Sie sich selbst aktualisierende Windows-basierte Anwendungen erstellen können, die mit minimaler Benutzerinteraktion installiert und ausgeführt werden können. Die ClickOnce-Bereitstellung überwindet drei Hauptprobleme bei der Bereitstellung:

Schwierigkeiten beim Aktualisieren von Anwendungen. Bei der Bereitstellung von Microsoft Windows Installer muss der Benutzer bei jeder Aktualisierung einer Anwendung die gesamte Anwendung neu installieren. Mit der ClickOnce-Bereitstellung können Sie Updates automatisch bereitstellen. Es werden nur die Teile der Anwendung heruntergeladen, die geändert wurden. Anschließend wird die vollständige, aktualisierte Anwendung aus einem neuen Ordner nebeneinander erneut installiert.

Auswirkungen auf den Computer des Benutzers. Bei der Bereitstellung von Windows Installer sind Anwendungen häufig auf gemeinsam genutzte Komponenten angewiesen, was zu Versionskonflikten führen kann. Bei der ClickOnce-Bereitstellung ist jede Anwendung eigenständig und kann andere Anwendungen nicht beeinträchtigen.

Sicherheitsberechtigungen. Die Bereitstellung von Windows Installer erfordert Administratorrechte und ermöglicht nur eine eingeschränkte Benutzerinstallation. Die ClickOnce-Bereitstellung ermöglicht Benutzern ohne Administratorrechte die Installation und gewährt nur die für die Anwendung erforderlichen Berechtigungen für die Codezugriffssicherheit.


quelle
Hierbei handelte es sich nicht um die Vor- und Nachteile von Click Once und MSI (zu denen viele Ihrer Schlussfolgerungen falsch und / oder unvollständig sind), sondern um bewährte Methoden für die automatische Aktualisierung von Lösungen.
Christopher Painter
Ich weiß diese Informationen trotzdem zu schätzen und teile sie dem Entwickler mit, um zu prüfen, ob er sie als Option in Betracht gezogen hat. Vielleicht dachte er, er müsste den Aktualisierungsprozess selbst entwickeln.
Nun, Christopher, nimm es mit MS auf, das ist direkt von MSDN. Das ist auch wirklich ein hilfreicher Kommentar.
Wenn es für Bereitstellungstechnologien codiert, wundert es mich nie, wenn jemand, der etwas auf MSDN veröffentlicht, etwas falsch macht. Es gibt nur sehr wenige von uns Experten, die dieses Zeug wirklich verstehen.
Christopher Painter
2

Ich persönlich habe Anwendungen geschätzt, die dem Sparkle-Framework ähneln . Ich denke, es ist nur ein Mac-Ding, aber es macht im Wesentlichen Folgendes (über den Kopf - ich gehe davon aus, dass das Verhalten angepasst werden kann).

  1. Nach Updates suchen (normalerweise beim Start der Anwendung)
  2. Wenn es eines gibt, wird ein separates Fenster mit einem schön formatierten Changelog angezeigt
  3. Der Benutzer kann diese Version dann überspringen, installieren oder sich später daran erinnern lassen
  4. Wenn er beschließt, die Anwendung zu installieren, wird unter dem Änderungsprotokoll ein Fortschrittsbalken angezeigt
  5. Nach dem Download kann der Benutzer entscheiden, die Anwendung zu beenden und sofort zu installieren oder nach dem Beenden der Anwendung zu installieren

Wenn man bedenkt, dass es sich um .msi handelt, ist dieses spezielle Framework nicht wirklich anwendbar, aber in diesem Fall würde ich lieber eine vorhandene Lösung wählen, als das Rad neu zu erfinden.

sebastiangeiger
quelle
1

Ich würde sagen, Sie müssen Ihren Benutzer wirklich kennen. Wenn sie versiert sind und ein starkes Interesse daran haben, auf dem neuesten Stand zu bleiben, wird Nummer 1 funktionieren.

Unterschätzen Sie niemals die Faulheit eines Benutzers, denn wenn sein Programm nicht mehr funktioniert, weil es nicht mehr unterstützt wird, werden Sie später mit Helpdesk-Anrufen überflutet.

Die Zeit wird entweder von der Entwicklung (# 2) oder vom Support (# 1) kommen.

maple_shaft
quelle
1

Was ist damit?

  • Suchen Sie beim Start der Anwendung nach einer neuen Version und laden Sie sie (optional nach Aufforderung des Benutzers) herunter.
  • Wenn der Download abgeschlossen ist, stellen Sie dem Benutzer eine Schaltfläche zur Verfügung, mit der er die Anwendung neu installieren und neu starten kann (verwenden Sie kein Dialogfeld, es sei denn, das Update ist kritisch).
  • Starten Sie beim Herunterfahren der Anwendung (optional nach Aufforderung des Benutzers) das Installationsprogramm. Falls sich der Benutzer weigert, die Installation zu diesem Zeitpunkt durchzuführen (möglicherweise haben sie es eilig), tun Sie dies beim nächsten Mal, bevor die Anwendung gestartet wird.

Sie müssen den Benutzer nicht belästigen, Sie müssen nichts schließen ...

maaartinus
quelle
1

Warum nicht etwas in der Mitte?

Fordern Sie zum Herunterladen auf (oder wählen Sie "Automatisch herunterladen"), nachdem Sie aufgefordert wurden , das heruntergeladene Update zu installieren (führen Sie die MSI-Datei aus). Auf diese Weise negieren Sie die Kehrseite von # 2 (schließen mitten in der Arbeit des Benutzers) und behalten dennoch den Komfort bei, der durch 1 weiteren Klick entsteht.

Das Dialogfeld " Update schließen und installieren? " Sollte leicht zugänglich (aber nicht ärgerlich) sein, wenn der Benutzer dies zunächst ablehnt. Mit "<Programmname> starten?" Checkbox am Ende von .msi wird fast wie # 2 mit nicht wirklich mehr Arbeit sein

@ security
Programme in modernen Windows können die Erlaubnis zum Ausführen von Aktionen anfordern, für die Administratorrechte erforderlich sind.

NoxArt
quelle
1

Ich habe 124 Leihhäuser, die meine Leihhaus-Verwaltungs-Desktop-App verwenden. Immer wenn ich ein neues Update habe, sende ich ihnen eine E-Mail, in der sie über das Update und die Details informiert werden. Dann haben sie die Möglichkeit, es per FTP zu versenden, indem sie sich auf meiner Website anmelden. Sie haben auch die Möglichkeit, das Update zurückzusetzen. Meine Website verfolgt auch die jeweils installierte Version der Leihhäuser.

Frank R.
quelle