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: 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