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:
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.
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.
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:
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:
Public Function IsLatestVersion() As Boolean
Dim IsLatestVersion_ As New Boolean
Dim LatestVersion As String = Web.DownloadString("http://DeineDomain.de/ordner/version.txt")
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
End Function
Alles anzeigen
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:
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:
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:
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:
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:
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