Frage

Versucht, Sie zu Ehren, eine feature-Anfrage von unseren Kunden, ich möchte, dass meine Anwendung, wenn Internet verfügbar ist, schauen Sie auf unsere website, wenn eine neue version verfügbar ist.

Das problem ist, dass ich keine Ahnung habe, was muss getan werden auf der server-Seite.

Ich kann mir vorstellen, dass meine Anwendung (entwickelt in C++ mit Qt) sendet eine Anfrage (HTTP ?) auf dem server, aber was Los ist, um auf die Anfrage reagiert ?In Auftrag zu gehen durch firewalls, ich denke, ich werde zu benutzen port 80 ?Ist das richtig ?

Oder, für eine solche Funktion, tun ich haben zu Fragen Sie unser Netzwerk-admin öffnen Sie einen bestimmten port-Nummer durch die ich kommunizieren ?


@pilif :vielen Dank für deine ausführliche Antwort.Es ist immer noch etwas unklar für mich :

wie

http://www.example.com/update?version=1.2.4

Dann können Sie zurückkehren, was immer Sie wollen, wahrscheinlich auch der download-URL, von der der installer der neuen version.

Wie kann ich etwas zurücksenden ?Es wird eine php-oder asp-Seite (ich weiß nichts über PHP, noch ASP, muss ich gestehen) ?Wie kann ich entschlüsseln, die ?version=1.2.4 Teil, um etwas von dem zurückgeben entsprechend ?

War es hilfreich?

Lösung

Ich würde es absolut empfehlen, nur auf Ihre Website eine einfache HTTP-Anforderung zu tun. Alles andere ist zum Scheitern verurteilt.

würde ich eine HTTP-GET-Anfrage auf eine bestimmte Seite auf Ihrer Website, um die Version der lokalen Anwendung enthält.

wie

http://www.example.com/update?version=1.2.4

Dann können Sie zurückkehren, was immer Sie wollen, wahrscheinlich auch die Download-URL des Installateurs der neuen Version.

Warum setzt nicht nur eine statische Datei mit der neuesten Version auf den Server und lassen Sie den Client entscheiden? Weil Sie wollen (oder müssen) kann die Kontrolle über den Prozess. Vielleicht kompatibel 1.2 wird nicht mit dem Server in der Zukunft, so dass Sie wollen der Server das Update auf 1.3 zwingen, aber das Update von 1.2.4 bis 1.2.6 könnte unkritisch sein, so dass Sie den Client präsentieren mögen vielleicht mit ein optionales Update.

Oder möchten Sie über die installierte Basis eine Panne haben.

oder was auch immer. Normalerweise habe ich gelernt, es ist am besten, wie viel Intelligenz auf dem Server zu halten, da der Server ist, was Sie ultimative Kontrolle über.

hier mit ein wenig Erfahrung im Bereich Sprechen, ist hier eine kleine Vorschau von dem, was kann (und wird - glauben Sie mir) schief gehen:

  • Ihre Bewerbung wird von machen HTTP-Requests durch die verschiedenen Personal Firewall-Anwendungen da draußen verhindert werden.
  • Ein beträchtlicher Prozentsatz des Benutzers nicht die erforderlichen Berechtigungen, um tatsächlich der Update-Prozess zu bekommen gehen.
  • Auch wenn die Benutzer die alte Version über ihre persönliche Firewall erlaubt haben, wobei das Werkzeug beschweren, weil die .EXE geändert hat und wird den Benutzer empfiehlt nicht die neue exe zu ermöglichen, mit den Wünschen ihrer Sicherheit zu verbinden (Nutzer in der Regel entsprechen Werkzeug hier).
  • In verwalteten Umgebungen, werden Sie erschossen und aufgehängt werden (nicht unbedingt in dieser Reihenfolge) für ausführbare Inhalte aus dem Web geladen und dann tatsächlich ausgeführt wird.

So um den Schaden zu halten so niedrig wie möglich,

  • nicht still, wenn Sie nicht auf den Update-Server verbinden
  • vor dem Update, stellen Sie sicher, dass Sie Schreibrechte in das Installationsverzeichnis haben und den Benutzer warnen, wenn Sie dies nicht tun, oder aktualisieren Sie einfach gar nicht.
  • Geben Sie eine Möglichkeit für Administratoren, die Auto-Update zu deaktivieren.

Es ist kein Spaß zu tun, was Sie zu tun, sind über - vor allem, wenn Sie mit nicht technisch versierte Anwender beschäftigen, wie ich viele Male hatte

.

Andere Tipps

Pilif Antwort war gut, und ich habe viel Erfahrung mit diesem auch, aber ich möchte etwas mehr hinzuzufügen:

Denken Sie daran, dass, wenn Sie YourApp.exe starten, dann wird der „Updater“ wird versuchen, YourApp.exe mit der neuesten Version zu überschreiben. Je nach Betriebssystem und Programmierumgebung (Sie haben C ++ / QT erwähnt, ich habe keine Erfahrung mit diesen), werden Sie nicht der Lage sein, zu überschreiben YourApp.exe , weil es wird im Einsatz sein.

Was ich getan habe ist ein Startprogramm erstellen. Ich habe eine MyAppLauncher.exe, die eine Konfigurationsdatei (xml, sehr einfach) nutzt die „echte exe“ zu starten. Sollte eine neue Version vorhanden ist, kann der Launcher die „echte exe“ aktualisiert werden, da es nicht in Gebrauch ist, und dann die neue Version neu starten.

Nur, dass im Auge behalten, und Sie werden sicher sein.

Martin,

Sie haben absolut recht natürlich. Aber ich würde den Launcher mit dem Installationsprogramm liefern. Oder laden Sie einfach das Installationsprogramm, starten Sie es und beenden Sie mich so bald wie möglich. Der Grund ist, Fehler im Launcher. Sie würden nie, nie, wollen sich auf eine Komponente abhängig sein Sie nicht aktualisieren können (oder vergessen in dem anfänglichen Abfall enthalten).

So ist die Nutzlast ich mit dem Aktualisierungsprozess meiner Anwendung verteilen nur das Standard-Installationsprogramm, aber ohne jede signifikante UI. Sobald der Client überprüft, dass der Installer eine Chance, erfolgreich ausgeführt hat und sobald es den Updater heruntergeladen hat, läuft es, dass und beendet sich.

Der Updater als läuft, installiert seine Nutzlast in das ursprüngliche Installationsverzeichnis und startet die (hoffentlich aktualisiert) Anwendung.

Still: Der Prozess ist behaart und Sie besser zweimal überlegen, bevor eine Auto-Update-Funktion auf der Windows-Plattform Implementierung, wenn die Anwendung einen großen Schwerpunkt der Nutzung hat

.

in PHP, die Sache ist einfach:

<?php
    if (version_compare($_GET['version'], "1.4.0") < 0){
        echo "http://www.example.com/update.exe";
    }else{
        echo "no update";
    }
?>

Wenn Sie natürlich könnten dies verlängern so die aktuell verfügbare Version ist nicht im Skript hartcodiert, aber das ist nur über den Punkt darstellt.

In Ihrer Anwendung würden Sie diesen Pseudo-Code haben:

result = makeHTTPRequest("http://www.example.com/update?version=" + getExeVersion());
if result != "no update" then
    updater = downloadUpdater(result);
    ShellExecute(updater);
    ExitApplication;
end;

Sie können ferner das „Protokoll“ zu erweitern, indem etwas das PHP-Skript Angabe zurückkehren konnte den Client sagen, ob es sich um ein wichtiges, obligatorisches Update oder nicht.

Sie können auch einen Text hinzufügen, um den Benutzer anzuzeigen -. Vielleicht einige Informationen über enthält, was geändert

Ihre Möglichkeiten sind ziemlich grenzenlos.

Meine Qt App nutzt nur QHttp winzige XML lesen Sie meine Website abfeilen, die die neueste Versionsnummer enthält. Wenn diese größer als die aktuelle Versionsnummer ist gibt es die Möglichkeit, auf die Download-Seite zu gelangen. Sehr einfach. Funktioniert.

Ich würde der Antwort von @Martin und @Pilif zustimmen, aber hinzufügen;

Erwägen Sie, Ihren Endbenutzern die Entscheidung zu überlassen, ob sie das Update tatsächlich an Ort und Stelle installieren möchten, oder die Installation des Updates zu verzögern, bis sie mit der Verwendung des Programms fertig sind.

Ich kenne den Zweck/die Funktion Ihrer App nicht, aber viele Anwendungen werden gestartet, wenn der Benutzer an Ort und Stelle etwas Bestimmtes tun muss – nichts ist ärgerlicher, als eine App zu starten und dann zu erfahren, dass es eine neue Version gibt und Sie dies tun müssen Warten Sie, bis die App heruntergeladen ist, schließen Sie die App und starten Sie sie neu.Wenn Ihr Programm über andere Ressourcen verfügt, die möglicherweise aktualisiert werden (Referenzdateien, Datenbanken usw.), wird das Problem noch schlimmer.

Wir hatten ein EPOS-System in etwa 400 Geschäften im Einsatz und zunächst dachten wir, dass es großartig wäre, das Programm vor Ort zu aktualisieren und herunterzuladen (unter Verwendung einer Datei mit einer Versionsnummer, die den oben genannten Vorschlägen sehr ähnlich ist) ...großartige Idee.Bis alle Geschäfte ihre Systeme ungefähr zur gleichen Zeit starteten (8:45–8:50 Uhr) und unser Server einen Download von mehr als 20 MB an 400 Remote-Server durchführte, der dann die lokale Software aktualisierte und einen Fehler verursachte Neustart.Chaos – etwa 10 Minuten lang konnte niemand handeln.

Unnötig zu sagen, dass dies uns dazu veranlasste, die Funktion „Nach Updates suchen“ zu deaktivieren und sie so umzugestalten, dass die Shops das Update auf später am Tag „verzögern“ konnten.:-)

BEARBEITEN:Und wenn irgendjemand von ADOBE liest – um Himmels willen, warum besteht der verdammte Acrobat-Reader darauf, Updates herunterzuladen und so einen Mist, wenn ich einfach nur loslegen will, um ein Dokument zu lesen?Ist es beim Start nicht langsam genug und ohnehin schon aufgebläht genug, ohne jedes Mal, wenn ich ein PDF lesen möchte, weitere 20 bis 30 Sekunden meines Lebens mit der Suche nach Updates zu verschwenden?
BENUTZEN SIE NICHT IHRE EIGENE SOFTWARE??!!! :-)

Auf dem Server könnten Sie haben nur eine einfache Datei „latestversion.txt“, die die Versionsnummer enthält (und vielleicht URL herunterladen) der neuesten Version. Der Kunde muss dann nur diese Datei lesen, eine einfache HTTP-Anforderung mit (ja, auf Port 80) http abrufen : //your.web.site/latestversion.txt , die Sie dann analysieren kann die Versionsnummer zu erhalten. Auf diese Weise kann jeden Wunsch Server-Code nicht brauchen --- Sie brauchen nur eine einfache Datei auf Ihre bestehende Website hinzuzufügen.

Wenn Sie Ihre Dateien im Update-Verzeichnis auf example.com halten, der PHP-Skript sollte sich herunterladen für Sie die Anfrage bereits erwähnt gegeben. (Ihr Update würde yourprogram.1.2.4.exe

$version = $_GET['version'];    
$filename = "yourprogram" . $version . ".exe";
$filesize = filesize($filename);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: post-check=0, pre-check=0");
header("Content-type: application-download");
header('Content-Length: ' . $filesize);
header('Content-Disposition: attachment; filename="' . basename($filename).'"');
header("Content-Transfer-Encoding: binary");

Das macht Ihren Web-Browser denke, es ist eine Anwendung heruntergeladen ist.

Der einfachste Weg, dies zu machen, ist eine HTTP-Anforderung feuern eine Bibliothek wie Libcurl und machen es eine ini oder xML-Datei herunterladen, die die Online-Version enthält und in dem eine neue Version würde online verfügbar sein.

, um die XML-Datei nach dem Parsen Sie können bestimmen, ob eine neue Version benötigt wird, und laden Sie die neue Version mit libcurl und installieren Sie es.

Just been (XML-Datei) auf dem Server mit der Versionsnummer der neuesten Version, und eine URL zum Download der neuen Version von. Ihre Anwendung kann dann fordern Sie die XML-Datei, sucht, wenn die Version von der eigenen unterscheidet, und handelt entsprechend.

Ich denke, dass einfache XML-Datei auf dem Server ausreichen würde, für die Version nur Prüfzwecken.

Sie müssen dann nur ein FTP-Konto auf dem Server und Build-System, das eine Datei per FTP ist in der Lage, nachdem es eine neue Version gebaut hat. Das Build-System auch direkt Installationsdateien / zip auf Ihrer Website könnte!

Wenn Sie wollen, dass es halten wirklich einfach, laden Sie einfach eine version.txt auf einen Webserver, die eine Ganzzahl Versionsnummer enthält. Laden Sie, dass der Check gegen die neuesten version.txt Sie heruntergeladen und dann laden Sie sich einfach die msi oder Setup-Paket und führen Sie es.

Weitere erweiterte Versionen wäre rss, xml oder ähnliches zu verwenden. Es wäre am besten, eine Drittanbieter-Bibliothek zu verwenden, um das rss zu analysieren und Sie können Informationen enthalten, die für Ihre Nutzer über Änderungen angezeigt, wenn Sie dies wünschen.

Im Grunde brauchen Sie nur einfache Download-Funktionalität.

Diese beiden Lösungen benötigen Sie nur Port 80 ausgehend von der Client-Seite zuzugreifen. Dies sollte in der Regel nicht erforderlich Änderungen an Firewalls oder Vernetzung (auf der Client-Seite) und Sie müssen einfach nur einen Internet mit Blick auf Web-Server haben (Web-Hosting, Colocation oder einen eigenen Servers - alles würde hier arbeiten).

Es gibt ein paar kommerziellen Auto-Update-Lösungen zur Verfügung. Ich werde die Empfehlungen für die anderen Beantworter verlassen, weil ich nur Erfahrung auf der .net Seite haben mit Click-Once und Updater Application Block (letztere nicht fortgesetzt wird mehr).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top