C++ Builder: Online-Update-Prüfung einbauen?



  • Hallo zusammen!

    Ich bastel grad an einem kleinen Programm, bei dem ich gerne eine Online-Update-Prüfung einbauen würde. Ich stell mir das so vor:

    Auf meinem Webspace liegt eine Datei, in der die aktuelle Versionsnummer eingetragen ist. Drückt der Nutzer in meinem Programm auf "Check for update", dann soll die Software die Versionsnummer aus der Datei auf meinem Webspace (per HTTP) auslesen und mit der aktuell installierten Version vergleichen.

    Wie könnte ich das am einfachsten anstellen? 🙂



  • Hi,

    Habe es bei mir genauso umgesetzt und funktioniert super. Man sollte nur darauf achten das der Webspace sich nicht ändern darf - und sei in einem jahr denn dann wäre die datei nicht auffindbar.

    Habe das über IdFtp gelöst (Indy).

    zuerst holt er sich diese Datei wo weitere infos drinnstehen zb. aktuellste Versionsnr. pfad zum Update selbst usw.

    Er vergleicht dann die Versionsnr die online verfügbar ist mit der die installiert ist ist sie höher sagt "gibt ein Update"
    Da in der Datei ja auch der link zum update hinterlegt war kann man das update dann noch direkt aus der Anwendung heraus runterladen und installieren.



  • Das ist ja schön, dass es bei dir wunderbar funktioniert aber könntest du vieleicht etwas genauer werden? 🙂



  • Kann mir hier niemand behilflich sein? Die Hilfe-Funktion im C++ Builder erschlägt mich etwas :).



  • Hallo,

    - Mit der Indy-Komponente IdHTTP kommst du an den Content der Datei auf deinem Webspace.
    - Mit GetFileVersionInfo() kommst du an die Version deiner Anwendung.

    Beide miteinander vergleichen und wenn eine neuere Verfügbar ist, diese runterladen. Dazu kannst du dann die schon angesprochenen FTP-Komponente (IdFTP) verwenden. Nachdem runterladen kannst du sie dann auch noch mit ShellExecute ausführen.

    VlG



  • Wenn ich den Header inkludiere

    #include <IdHTTP.hpp>

    dann bekomm ich beim compilieren immer zig Fehler, z.B.:

    [BCC32 Fehler] wsnwlink.h(289): E2186 Unerwartetes Dateiende im in Zeile 154 beginnenden Kommentar

    [BCC32 Fehler] mswsock.h(27): E2092 Speicherklasse 'extern' ist hier nicht erlaubt

    [BCC32 Fehler] Idwship6.hpp(22): E2040 Deklaration nicht ordnungsgemäß abgeschlossen

    usw.

    Ich hab keine Ahnung, was das soll.



  • Hallo,

    IdHTTP ist eine Komponente die du dir direkt aus der Komponentenpalette (Reiter: Indy Client (glaub ich)) auf deine Form ziehen kannst.

    Dann erstellst du irgendwo den Button "Check for update" in dessen OnClick-Event du mit folgendem anfängst:

    IdHTTP1->Get("http://www.deineurl.tld/deinedatei.txt");
    //dann gehts weiter mit der eigenen Version:
    DWORD size;
    AnsiString slExeName = Application -> ExeName;
    char *buffer = new char [size];
    GetFileVersionInfo(slExeName.c_str(), 0, size, buffer);
    //dann der Vergleich und der Download
    

    VlG



  • Hallo!

    So hab ich es jetzt auch gemacht. Wenn ich den entsprechenden Indy-Client aus der Tool-Palette auf das Form ziehe, fügt er mir auch automatisch alle Header ein.

    Allerdings ändert das nichts an meinem Problem, die im vorigen Post beschriebenen Fehler treten immer noch auf!



  • Hallo,

    #include <IdHTTP.hpp> ...

    ... muss natürlich wieder raus aus dem Code

    VlG



  • Hab ich davor natürlich rausgemacht, komplett ohne Peil bin ich auch nicht. Ok, im Endeffekt schon was die Fehler angeht :).



  • Hallo,

    kamen die Fehler erst nachdem du #include <IdHTTP.hpp> gemacht hast? Wenn ja, hast du im selben Atemzug noch irgendwas anderen eingebunden?

    BTW: Von welcher Builder-Version reden wir?

    VlG



  • Ja, die Fehler kamen erst nach dem Einbinden und nein, mehr hab ich nicht eingebunden. Ich verwende übrigens den C++ Builder 2010.
    Ich hab das Projekt dann nochmal komplett neu erstellt und den Indy-HTTP-Client auf das Form gezogen, so wie du es gesagt hast. Dabei inkludiert er mir automatisch die benötigten Header. Das Ganze führte aber wie gesagt leider nicht zum Erfolg, die Fehler waren immer noch die gleichen.

    Ich hab aber eine (suboptimale) Lösung gefunden:

    Stelle ich die Build-Konfiguration auf "release", dann funktioniert es. Sobald ich aber wieder "debug" verwende, kommt es wieder zu den besagten Fehlern.


Anmelden zum Antworten