[VB]Halbwegs Professioneller Updater für eure Anwendungen

09/09/2011 00:50 DoctorPixl#1
Guten Abend/Guten Morgen Elitepvpers Community

In diesem Tutorial möchte ich euch zeigen wie man einen recht guten Updater für eure Anwendungen Programmiert.

Wir brauchen:
1x Form
1x Label
1x ProgressBar
1xFTP Server (square7,ohost,bplaced,kilu. etc...

(Wichtig: Gestaltet die Form am besten klein, da wir den updater in eure Anwendungen einbinden müssen)

So

Diesen Code fügt ihr in die Form ein, aber ich bitte euch nicht einfach Copy&Paste zu betreiben.
Versucht den Code zu verstehen:)

Code:
Imports System.Net

Public Class Form1
    Private WithEvents httpclient As WebClient
    Dim pfad As String = Nothing
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Hide()
ShowDialog:
        SaveFileDialog1.ShowDialog()
        If SaveFileDialog1.FileName = Nothing Then
            GoTo ShowDialog
        End If
        pfad = SaveFileDialog1.FileName


        Try
            httpclient = New WebClient
            Dim URL As String = "" 'Hier kommt der Link zur Datei die immer geupdated werden soll
            Me.Show()
            Application.DoEvents()
            httpclient.DownloadFileAsync(New Uri(url), pfad)
            Application.DoEvents()

        Catch ex As Exception
            MsgBox("Es ist folgender Fehler aufgetreten:" & vbNewLine & ex.ToString, MsgBoxStyle.Critical, "Es ist ein Fehler aufgetreten")

        End Try

    End Sub



    Private Sub httpclient_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles httpclient.DownloadFileCompleted
        MsgBox("") 'Die nachricht die angezeigt werden soll,wenn das update fertig ist
        Process.Start(pfad)
        Me.Close()

    End Sub

    Private Sub httpclient_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles httpclient.DownloadProgressChanged
        Me.ProgressBar1.Value = e.ProgressPercentage
        Dim totalbytes As Double = e.TotalBytesToReceive
        Dim bytes As Double = e.BytesReceived
        Me.Label1.Text = bytes & " KB von " & totalbytes & "KB"

    End Sub
End Class

Nun brauchen wir noch den Code für eure Anwendung damit der Updater überhaupt sinn hat.

Dieser code kommt bei eurer Anwendung in die Form die als erstes gestartet wird(man kann es auch variabel machen, aber ich finde es so besser xP)

wie oben bereits gesagt kein reines copy&paste machen, sondern code verstehen

Code:
Dim VersionChecker As New System.Net.WebClient ' Erstellt eine neue Instanz von Webclient
        Dim ServerVersion As String = VersionChecker.DownloadString("euerftp\version.ini") 'Hier wird der Inhalt der Datei runtergeladen (zB. 1.1)
        Dim MeineVersion As String = Me.Label_v.Text ' Hier wird der Variable MeineVersion der Text von dem Label zugewiesen zB. 1.0

        If Not ServerVersion = MeineVersion Then
            MsgBox("Es ist eine Neuere Version von .. verfügbar,es wir nun Automatisch geupdatet", MsgBoxStyle.Information) 'text der kommt falls neue version vorhanden
            Shell(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\updater.exe")
            End
Ihr braucht ein Label namens:Label_v aber ihr könnt es auch umbennen wenn ihr wollt.
Und ein Label in der die Aktuelle Version steht,also zb 1.0 das is das besagte Label_v.text

Wie ihr dem Code eventuell bereits entlesen habt läuft das ganze über eine .ini die auf eurem ftp ist.
Falls in der ini 1.1 steht wird der updater automatisch updaten.
Falls in der ini 1.0 steht passiert nichts,also müsst ihr immer die V_Nummer in eurer Anwendung anpassen..


Okay, wir haben es fast geschafft, jetzt müssen wir nurnoch den updater in eure Anwendung einbinden

Das machen wir einfach so

Oben im Tooltip
Projekt/.... Eigentschaften/Ressourcen/Ressource Hinzufügen/Vorhandene Datei hinzufügen/updater auswählen.

Okay nun ist euer Updater startklar.
Ich hoffe ich konnte euch Helfen

Mfg:
-DoctorPixl
09/09/2011 13:15 Che#2
Ach Mensch warum für jedes Thema 3 oder mehr Threads?
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]

Um die beiden anderen Threads zu finden braucht man ned mal die SuFu vergewaltigen, dafür musste einfach nur die augen auf machen, wenn du in die Section gehst! Anstatt nen neuen Thread für jede Methode aufzumachen kannst du das doch auch als Antwort (= Post) in nen alten Thread haun, hab ich doch auch gemacht und mir hats auch ned wehgetan!
09/09/2011 13:58 Mr.Black.Data#3
Nice Work

Isn guter Updater,ich füge den bei mir in den Post ein :)
09/13/2011 14:39 krustx#4
kp, was daran professionell sein soll!
1. Su verwendest GoTo, gehts noch ? Jeder vernünftige Programmierer würde dich dafür schlagen.

2. Den SaveFilaDialog überprüft man anders !
Quote:
Dim sDialog As New SaveFileDialog
If sDialog.ShowDialog = Windows.Forms.DialogResult.OK Then

End If
3. Application.DoEvents() OMG !!! Schon mal was von Threading gehört ???

4. Was ist, wenn in der Datei eine geringere Version steht, dann wird trozdem geupdatet, z.B.:
In Datei steht version 0.3
Programm hat version 0.4
-> Programm lädt trozdem version 0.3 runter, obwohl es schon 0.4 ist.