Pues me precisa hacer doble post, si lo quieres unir hallá tu... 
Pos bueno aquí os traigo un updater que he hecho en 
3 mins. 

- 'Updater creado por Ikillnukes 
- ' Ejemplos: Updater.Comprobar("https://dl.dropboxusercontent.com/s/2iin21gf8g629j9/upt.txt?dl=1", ".\Temp\", "1") 
- 'La url puede ser de cualquier tipo yo recomiendo que uséis Dropbox, puesto que es directo y la url no sufre cambios. 
- 'El directorio puede ser cualquier sitio 
- 'El texto es la cadena que se va a comprobar, en caso de que no sea la misma que la del texto descargado previamente en Updatear, se va a llevar a acabo la funcion Updatear 
-   
- Imports System.Net 
- Imports System.IO 
- Imports System.Diagnostics 
-   
- Public Class Updater 
-   
- Public Shared Sub Comprobar(ByVal url As String, ByVal directorio As String, ByVal texto As String) 
-         Dim patha As String = directorio & "upt.txt" 
-         Dim patha2 As String = directorio & "Update.zip" 
-         Dim patha3 As String = directorio & "upt.exe" 
-   
-         If File- . Exists(- patha ) Then
 
-         End If 
-   
-         If File- . Exists(- patha2 ) Then
 
-         End If 
-   
-         If File- . Exists(- patha3 ) Then
 
-         End If 
-   
-         If Not File- . Exists(- patha ) Then
 
-             My.Computer.Network.DownloadFile( 
-         url, 
-         patha) 
-         End If 
-   
-         If File- . Exists(- patha ) Then
 
-   
-             Dim-  lines  As String() = File- . ReadAllLines(- patha )
 
-   
-             If Not lines(0) = texto Then 
-                 If MsgBox("¡Atención! Su aplicación está desactualizada." & vbCrLf & "Pulse ""Sí"" para continuar con la instalación. O ""No"" para descartar cambios.", MsgBoxStyle.YesNo, "¡Atención! Su app está desactualizada...") = MsgBoxResult.Yes Then 
-                     My.Computer.Network.DownloadFile( 
-             lines(1), 
-             patha2) 
-                     Extraer.Extraer(patha2, directorio) 
-                     Dim psi As New ProcessStartInfo() 
-                     psi.UseShellExecute = True 
-                     psi.FileName = patha3 
-                     Process.Start(psi) 
-                     Application.Exit() 
-                 End If 
-             End If 
-   
-         End If 
-     End Sub 
-   
- End Class 
Bueno, pues aquí dejo para que se compruebe cada X secs la app si está a la última:
- 'Casi todas las cosas que hay aquí son conocimientos adquiridos gracias a Elektro, GRACIAS TÍO :D 
-   
- Dim url As String = "https://dl.dropboxusercontent.com/s/2iin21gf8g629j9/upt.txt?dl=1" 'Esta es la Url de donde va a comprobarse todo 
-     Dim texto As String = INI_Manager.Load_Value(".\Test.ini", "AppVer") 'Aquí está la cadena de texto que se chekea 
-   
-     Sub Updatear() 'Función de updatear, me estoy pasando un poco con los comentarios no? xD 
-         Updater.Comprobar(url, ".\Temp\", texto) 
-     End Sub 
-   
-     Dim WithEvents temer As New System.Windows.Forms.Timer With {.Interval = 15000, .Enabled = True} 'Aquí se define el Timer y sus properties dinámicamente, cortesía de Elektro, EDITADO :) 
-   
-     Private Sub Temer_Start(sender As Object, e As EventArgs) Handles temer.Tick 
-         Updatear() 'Aquí se chekea cada 15 secs esa función 
-     End Sub 
-   
Por último, como deberíais poner el archivo de texto, para que se compruebe correctamente todo:
Explicación:
Bueno, pues para la próxima versión, le voy a poner un 
Download Async para que cuando se descargue la 
Update se pueda ver en un 
Progress Bar para ver el progreso de la descarga.
Por si no fuera poco, para superarme, voy a hacer una 
mini-app, para subir paquetes de 
Updates de las 
apps que hagáis con 
DropNet, para que solo tengáis que darle a un botón y vuestros usuarios estén a la última.
Un saludo.Que os parece?PD: Tengo una duda... El 
"temer" sigue activado en los otros 
forms? Es que recuerdo que tuve un conflicto con un 
Timer en otro 
Form y era por que no lo pasaba
Como habréis visto, en un comentario llamo a una función llamada Extraer
aquí os dejo el 
Snippet:
- 'Extractor sacado de por ahí y adaptado por mí 
- 'PD: Solo funciona con .Zips, creo xD 
- ' Ejemplo: Extraer.Extraer("File.zip", ".\Directorio A Extraer\SubDirectorio") 
-   
- Imports Ionic.Zip 
-   
- Public Class Extraer 
-   
-     Public Shared Sub Extraer(ByVal ZipAExtraer As String, ByVal DirectorioExtraccion As String) 
-         Try 
-   
-             Using zip1 As ZipFile = ZipFile.Read(ZipAExtraer) 
-                 Dim e As ZipEntry 
-                 For Each e In zip1 
-                     e.Extract(DirectorioExtraccion, ExtractExistingFileAction.OverwriteSilently) 
-                 Next 
-             End Using 
-   
-         Catch ex As Exception 
-             MsgBox(ex.Message) 
-         End Try 
-     End Sub 
-   
- End Class 
Por sí queréis 
comprimir:
- 'Compresor sacado de por ahí y adaptado por mí 
- ' Ejemplo: Comprimir.Comprimir(".\Directorio A Comprimir\SubDirectorio", "File Compreso.zip") 
-   
- Imports Ionic.Zip 
-   
- Public Class Comprimir 
-   
-     Public Shared Sub Comprimir(ByVal NombreDirectorio, ByVal NombreGuardar) 
-         Using zip As ZipFile = New ZipFile() 
-             zip.AddDirectory(NombreDirectorio) 
-             zip.Save(NombreGuardar) 
-         End Using 
-     End Sub 
-   
- End Class 
Puede que próximamente puede que haga uno para que se pueda comprimir archivo por archivo, aunque va a ser bastante trabajo.... 
 PD:
PD: Se necesita la librería de 
Ionic.Zip... solamente necesitaremos referenciar a nuestro proyecto la librería que está dentro de la siguiente ruta: “DotNetZipLib-DevKit-v1.9 –> zip-v1.9 –> Debug“. La librería a referenciar es la “Ionic.Zip.dll”
Otro 
mini-snippet que he sacado de por ahí 
(para leer X línea de un Txt):
- Dim-  lines  As String() =-  IO. File- . ReadAllLines("archivo.txt")
 
- 'Ejemplo: lines(1) 'esto lee la línea 2 del archivo.txt