[Visual Basic] Update System - Modul

  • Moin Community,


    dieses kleine Tutorial setzt Grundkenntnisse voraus, ich zeige hier wie man ein UpdateSystem macht.
    Ich verwende hier ein Modul, da ich dies Übersichtliger finde, natürlich könnt ihr es auch in eure Klasse direkt einbauen.


    Dafür wird bennötigt:


    *Webspace mit Aktueller Version als .txt
    *1Form (Name: Form1)
    *Modul (Name: UpdateSys)
    2x Label("used_version_label", "latest_version_label")
    1x Button(Name: "CheckForUpdates_button")


    Los gehts:


    Als erstes erstellen wir uns ein neues Modul (Projekt => Neues Element hinzufügen => Modul).


    Dannach öffnet sich das Modul, der Code dürfte nun so aussehen:


    Code
    Module UpdateSys
    
    
    End Module


    Wir erstellen uns nun die erste Funktion, diese soll später zurückgeben (True oder False) ob es sich bei der benutzen Version um die neuste handelt.
    Wir nennen sie "IsLatestVersion", wir setzen sie als Public, da sie von allen Forms erreichbar sein soll.


    Code
    Module UpdateSys
    	Public Function IsLatestVersion() As Boolean
    
    
    	End Function
    End Module


    Wir benutzen keine Parameter für unsere Function, da wir diese nicht unbedingt bennötigen. Mit "As boolean" legen wir fest das unse Funktion später einen booleschen Wert zurückgibt, diese Angabe muss ich nur machen, da ich mit Option Strict On arbeite.


    Nun defininieren wir die Variable die später an die Form zurückgegeben werden soll, in diese Speichern wir später ab, ob die benutze Version die neuste ist.


    Code
    Dim IsLatestVersion_ As New Boolean


    Nun deklarieren wir einen WebClient dafür bennötigen wir denn Import 'System.Net'.


    Jetzt deklarieren wir eine String Variable Namens "LatestVersion", dieser weisen wir edn Inhalt der .txt auf unserem Webspace zu:


    Code
    Imports System.Net
    Module UpdateSys
    	Dim Web As New WebClient
    
    
    	Public Function IsLatestVersion() As Boolean
        	Dim IsLatestVersion_ As New Boolean
        	Dim LatestVersion As String = Web.DownloadString("http://DeineDomain.de/ordner/version.txt")
    	End Function
    End Module


    Nun müsst ihr euch entscheiden wie ihr die Version des benutzen Programmes speichert, dazu gäbe es mehrere Optionen die ich jetzt zeige:


    • Als Assemblyinformation Speichern (Sehr gut)
    • Als Datei abspeichern (Mittel)
    • In My.Settings abspeichern (Schlecht) !Hinweis! Beim verschieben und Kopieren der Anwendung werden die my.settings nicht mitkopiert.

    Möglichkeit 1:


    "Projekt" => "PROJEKTNAME - Eigenschaften" => "Anwendung" => "Assemblyinformationen" => "Assemblyversion"
    Dort legt ihr die Version fest.


    Nun vergleichen wir die benutze Version mit der neusten vom Webspace:



    Dannach setzen wir den Wert der 'IsLatestVersion' Variable auf True oder ggf. False.


    2. Möglichkeit


    Als erstes müsst ihr eine Datei ins verzeichnis der Anwendung legen, die sollte version.txt heißen.
    Legt diese ins Release Verzeichnis und ins Debug Verzeichnis.


    Nun ist der Code exakt gleich ausser das wir die If Abfrage von Möglichkeit 1 entfernen und gegen diese ersetzen:


    Code:


    Code
    If LatestVersion > My.Computer.FileSystem.ReadAllText(Application.StartupPath & "\version.txt") Then        	'Die Version auf dem Webspace ist neuer        	IsLatestVersion_ = False    	Else        	'Die aktuelle Version ist neuer oder die selbe wie auf dem webspace        	IsLatestVersion_ = True    	End If


    Mit 'Application.StartUpPath' bekommen wir den Pfad in der sich die Anwendung befindet, wir fügen ein "\version.txt" hinzu, um an die version.txt im Verzeichnis zu kommen.

    3. Möglichkeit


    Nun kommen wir zu einfachsten und meiner Meihnung nach schlechtesten Methode.
    Als erstes müssen wir in My.Settings eine passende Einstellung erstellen, dazu gehen wir in die Projekt Eigenschaften unter "Einstellungen".
    Wir wählen als Name "curr_version" und als Typ "String" als Wert gebt irh eure Version ein z.B "1.0".
    Der Code ist wieder gleich, bis auf die If abfrage, diese ersetzten wir gegen:


    Spoiler anzeigen

    If LatestVersion > My.Settings.curr_version Then
    'Die Version auf dem Webspace ist neuer
    IsLatestVersion_ = False
    Else
    'Die aktuelle Version ist neuer oder die selbe wie auf dem webspace
    IsLatestVersion_ = True
    End If


    Egal für welche Möglichkeit wir uns entschieden haben, das Ende ist gleich.
    Wir geben die Variable "IsLatestVersion" zurück, dazu "return IsLatestVersion".
    Ich arbeite nun mit Möglichkeit 1 weiter.
    Wir müssen nun noch den 2 Labels auf Form 1 einen Text zuweisen. Das müsst ihr an die Möglichkeit die irh euch ausgesucht habt anpassen.


    Code:

    Code
    Imports System.NetModule UpdateSys	Dim Web As New WebClient	Public Function IsLatestVersion() As Boolean    	Dim IsLatestVersion_ As New Boolean    	Dim LatestVersion As String = Web.DownloadString("http://DeineDomain.de/ordner/version.txt")    	Form1.used_version_label.Text = My.Application.Info.Version.ToString    	Form1.latest_version_label.Text = LatestVersion    	If LatestVersion > My.Application.Info.Version.ToString Then        	'Die Version auf dem Webspace ist neuer        	IsLatestVersion = False    	Else        	'Die aktuelle Version ist neuer oder die selbe wie auf dem webspace        	IsLatestVersion = True    	End If    	Return IsLatestVersion	End FunctionEnd Module


    Nun gehen wir zurück zur Form 1 und wechsel in die Code ansicht (doppelklick auf den Button).
    Im ClickEvent müssen wir nun nurnoch unsere Funktion aufrufen und das Ergebnis auswerten.


    Dies tuen wir so:

    Code
    Private Sub CheckForUpdates_button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckForUpdates_button.Click
        	If IsLatestVersion() = True Then
            	'Die benutze Version ist die neuste
    
    
        	Else
            	'Die benutze Version ist veraltet
        	End If
    	End Sub


    Nun können wir uns entscheiden ob wir die Datei direkt runterladen oder ob wir im Browser denn DownloadLink aufrufen, ich werde in diesem Beispiel den Downloadlink aufrufen, dafür müssen wir sobald ein Update herauskommt die Anwendung als "latest.exe" im Ordner ablegen.


    Der Code würde dann so aussehen:


    Code
    If IsLatestVersion() = True Then        	'Die benutze Version ist die neuste    	Else        	'Die benutze Version ist veraltet        	Process.Start("http://domain.de/ordner/latest.exe")    	End If


    Durch 'Process.Start' wird die Standard Anwendung für Links zum öffnen benutzt (z.B Firefox, Chrome, etc.)
    Ich bevorzuge diese Methode, da der Benutzer so selber entscheidet was er Downloadet oder nicht. Außerdem mögen manche Virenscanner das Downloaden von Anwendungen nicht :)


    Ich habe den Code kurz getestet, falls ihr trotzdem einen Fehler oder Probleme damit habt, könnt ihr hier gerne Posten.


    Mein Test Projekt könnt ihr unten Downloaden.


    Download: *Klick*


    P.S


    Ich habe das ganze hier Gestern Nacht verfasst und erst jetzt Abgesendet, es könnten sich also "Müdigkeits Fehler" eingeschlichen haben ;)

    Einmal editiert, zuletzt von Lars_Vegas ()

  • Sehr detaliert erklärt. Ist aufjedenfall cool. Werde ich mir nacher genauer anschauen ;)