Letzter Schritt, wir verwerfen die Ressourcen in "iox" sprich schließen den Stream und geben die Datei wieder frei.
Kommen wir zur Abfrage sprich dem Vergleich der Versionen,
hier gilt vorerst eines zu sagen, wir speichern die neuen Informationen der Version in der Registrierung und werden sie von da auch immer abrufen
weil es so keinen Dateisalat gibt und das ganze zudem dann auch sicher untergebracht ist.
Wie man sieht wird die Version aus der Variable "ot" da wo wohin die Daten der Textdatei ausgelesen wurden überprüft und
abgefragt "falls nicht" , wir überprüfen hier mit dem Schlüssel aus der Registrierung :
HKEY_CURRENT_USER > Software > deinprodukt > version
darin werden später auch die neuen Informationsdaten gespeichert ( dazu später mehr )
sollte der Schlüssel nicht gefunden werden oder nicht ausgelesen werden können so wird als Standardwert "0.0" wiedergegeben
also Version 0.0 halt
If Not ot = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\deinprodukt", "version", "0.0") Then
So nun zudem was passieren soll wenn die Version ein Update erhalten >sollte<...
Ich habe das ganze nochmal etwas auf gestaltet und bin so freundlich sag ich mal und frage den Benutzer nochmal ob er auch ein Update durchführen möchte.
Ich frage hier ab ob der Benutzer Updaten möchte, sprich ich frage ab ob das Ergebnis der Nachrichtenbox "MsgBoxResult.Yes" ist sprich
ob "ja" angeklickt wurde , sprich die Resultate der Aktion die in der Nachrichtenbox ausgeführt wurden, sollte eigentlich einfach zu verstehen sein 
If MsgBox("Eine Neue Version von 'deinprodukt' verfügbar , Version '" & ot & "'" & _
vbNewLine & "Möchten sie ein Update durchführen ?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Update") = MsgBoxResult.Yes Then
So fahren wir fort, hat der Benutzer nun "ja" angeklickt so soll folgendes passieren , genau ein Update...
dazu starten wir vom gleichen Verweis auf den Web Client einen Synchronisierten Download, dazu tun wir folgendes...
wir nehmen die Variable Client noch einmal her und wählen die Option des Synchronisierten Downloads,
als erstes übergeben wir wieder unsere Download Adresse um "Uri" Format dazu erstellen wir eine neue Uri
wie man sehen kann und übergeben die Adresse darin , danach kommt wieder unser Zielpfad , den ihr genauso selber bestimmen könnt.
client.DownloadFileAsync(New System.Uri("deineurl/produkt.zip"), My.Application.Info.DirectoryPath & "\produkt.zip")
So hier kommen wir nochmal zu den Extra wie den Fortschrittsbalken..
dazu tut ihr folgendes , ihr geht wieder in den Designer eures Editors und dort wählt ihr in der Toolbox
die "Progressbar" aus , diese zieht ihr nun so ins Fenster wie ihr sie haben wollt,
nun geht zurück in den Code und es geht folgendermaßen weiter...
So nun übergebt ihr die Rückrufe damit ihr den Fortschritt später sehen könnt bzw. ihn abfragen
und schauen könnt wann euer Download Fertig ist.
Die jeweiligen Rückrufe holt ihr aus der Web Client Variable denn daraus resultieren später auch die Fortschritte,
wie ihr seht verweise ich "DownloadProgressChanged" auf "DownloadProgress"
beim anderen genauso nur mit anderen Funktionen und einer anderen Subfunktion.
AddHandler client.DownloadProgressChanged, AddressOf DownloadProgress
AddHandler client.DownloadFileCompleted, AddressOf DownloadFertig
Hier mal die Subfunktionen dazu
Wie ihr seht haben ihre Köpfe deren Parameter man so nicht herausfindet, diese findet man aber heraus indem man in "client" nochmal
die Subelemente auswählt die benötigt werden und nachschaut, dort sollten sie dann in Klammern hinter den jeweiligen Aktionsnamen stehen 
So kommen wir zu diesen Rückruffunktionen , ich hab bereits erwähnt wozu sie diesen und ihre Namen sagen bestimmt auch einiges aus...
wie ihr seht lasse ich den Status des Fortschritts hier in den Fortschrittsbalken wandern der "Progressbar"
die Fortschrittsinformationen holt ihr euch aus der Variable "e" die ihr dann direkt an den Fortschrittsbalken übergeben könnt.
Private Sub DownloadProgress(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs)
Me.ProgressBar1.Value = e.ProgressPercentage
End Sub
So hier wird nun das getan was danach notwendig wäre, die neue Version einzutragen in den Pfad der Registrierung wo ihr auch
die Aktuellen Informationen bezüglich eures Programms abruft.
Das ganze wird dann extra beim beenden des Downloads erledigt, muss es aber nicht , eine andere Variante wäre das euer Programm diese
beim Start eintragen lässt sprich diese überträgt so muss der Update Manager dies nicht tun, wäre aber auch nur eine Idee 
Private Sub DownloadFertig(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\deinprodukt", "version", ot)
End Sub
So zum Schluss gilt nur noch eines zu sagen , vergesst eure Abfragen nicht mit End if abzuschließen 
so wäre der Code dann auch komplett und das wichtigste ergänzt eure Daten, Pfade und Zieladressen.
So das war es soweit zu diesem Tutorial was eigentlich ganz simpel zu verstehen sein sollte, ich hoffe ihr kommt damit klar und kopiert nicht nur sondern lest
auch wirklich und versucht es wirklich nachzuvollziehen denn wer auch mit eigenen Köpfchen arbeitet kapiert schneller.
Das wichtigste ist das ihr schon Erfahrungen mit Visual Basic haben solltet sprich es wäre definitiv nichts für Anfänger denn diese
würden sowieso nur kopieren sobald es nicht klappt , was sehr schade wäre.
//EDIT: vollen Code nochmal als Anhängsel 
http://pastebin.com/nE2cKNCG
- Gebraucht : 1x Button , 1x ProgressBar , beide ohne bestimmten Namen und natürlich ein Formular