Elegante Lösung für Versionscheck (online)?

BeaTBoxX

Erfahrenes Mitglied
Hallo zusammen,

ich hab ein Tool programmiert, was im weitesten Sinne online "Daten" auf nen Rootserver transferiert.Ich plane demnaechst noch ein paar Erweiterungen, und möchte den User zwingen die aktuellste Version meines Programms zu nutzen.
Also ist ein Versionscheck nötig.

Frage:

Wie macht man das am besten?
Einfach eine Textdatei mit aktueller Versionsnummer auf nen Webserver legen -> ziehen lassen -> abgleichen? Wenn ja, wie öffne ich eine solche Datei aus dem Web ? (http://www.beispiel.de/version) ?

Oder gibts da bessere Lösungen?

Danke für Anregungen!


Gruß
Frank
 
Zuletzt bearbeitet:
Hi!

IMO währe die optimale Lösung ein WebService basierend auf SOAP.

Wenn Dir aber der Aufwand zu groß ist kannst die Datei auch mittels System.Net.WebClient.OpenRead( URL ) eine Datei herrunterladen. Von der Funktion bekommst einen Stream den Du nur noch speichern musst.
Also ungefähr so:
C#:
using ( Stream WebStream = webClient.OpenRead( URL ) ) {
        if ( WebStream == null )
                // Fehlerbehandlung

        using ( FileStream OutStream = new FileStream(
                Path.Combine( targetFolder, fileName ),
                FileMode.Create, FileAccess.Write, FileShare.Write, READ_BUFFER ) ) {

                byte[] buffer = new byte[READ_BUFFER];
                int byteCount;

                while ( (byteCount = WebStream.Read(buffer, 0, buffer.Length) ) > 0)
                        OutStream.Write( buffer, 0, byteCount );
        }
}

Und wenn Du herraus finden willst, welches Encoding das File hat, musst das Content-Encoding aus dem Response Header auslesen ( webClient.ResponseHeaders[ "Content-Encoding" ] ).
 
Hi,

Wenn ich mich recht entsinn, stellt Click-Once auch so eine Funktionalität zur Verfügung.
Wenn gewünscht, schaut die Anwendung beim Starten auf einem Server nach, ob es eine neuere Version gibt. Wenn ja wird diese nach Rückfrage (kann sein, dass auch ohne) heruntergeladen und die Alte durch neue ersetzt.
 
ClickOnce ist eine Möglichkeit, funktioniert aber nur zusammen mit einem IE. Mit Firefox wird das eher weniger werden, da dieser ein Assembly an sich nicht kennt und daher auch nicht zuordnen kann.

Ansonsten ist die Variante mit dem File schon nicht sooooo schlecht. Ein Webservice ist hier wohl etwas übertrieben, ausser man möchte noch andere Dinge damit erledigen.
 
Der Webserver läuft dort sowieso. Ich müsste nur so eine "Versionsdatei" anlegen.
Na gut, dann werde ich das mal versuchen :)

Danke an alle :D
 
Morgen,

Für was aber die Versionsdatei? Du sprichst von einem Programm, also eine Exe. Diese hat eine FileVersion. Warum nutzt du die nicht? Zweite Möglichkeit wäre LastModified der Datei. Ist die Datei beim User älter als auf dem Server, dann kopieren.

Das ganze kannst du direkt im Betrieb der Anwendung machen:
Prüfen auf dem Server
Ist die Datei auf dem Server neuer?
Wenn ja: die Alte umbenennen
die Neue kopieren
Programm neustarten (ggf. auf Nachfrage)
 
Bezüglich FileVersion:
Die Versions-Datei am Server beschreibt die NEUE Version. Da bringt FileVersion relativ wenig, ausser man ladet sich die Version vom Server herunter und macht dann ein FileVersion was relativ ineffizient ist und zudem sinnfrei. Alternativ wäre noch eine aspx denkbar, die serverseitig ein Fileversion macht und die entsprechenden Informationen als Output zur Verfügung stellt, wodurch der Aufwand entfällt, diese Version-Datei zu pflegen.

MSDN: System.Diagnostics.FileVersionInfo.FileVersion-Eigenschaft
 
Wie kann man denn die Fileversion einer Datei die online ist auslesen niggo? Aus dem Content Header? Das währe ja mal was neues. *g* BeaTBoxX, wenn Du den Content Header anpassen darfst, kannst die Version vom Server auslesen lassen und in dem Content Header verfügbar machen. Dann spaarst Dir das Versionsfile. ;)

Ansonsten verwendest das Versionsfile und prüfst die Version gegen
System.Windows.Forms.Application.ProductVersion.
//Edit: Oder Du verwendest die System.Diagnostics.FileVersionInfo Klasse, die Norbert vorgeschlagen hat. Wie Du willst.

Dann die 2 Version Strings in jeweils ein Int Array Splitten (string.Splitt('.')), und dann vergleichst die einzelnen Nummern vom Anfang bis zum Ende der Arrays...
 
Zuletzt bearbeitet:
Die Lösung via einer eigenen ASPX Datei, welche die Daten zurückgibt ist ihmo eine recht geschmeidige, da hier einfach nur die neue Version reinkopiert werden muss. Wenn es sich dabei allerdings um ein Setup handelt, muss das Setup ebenfalls die neue Versionsnummer tragen. Sonst funktionierts nicht. Ebenfalls ließen sich darüber unterschiedlichste Produkte updaten.
 

Neue Beiträge

Zurück