[ SRC ] Actualizador de Aplicaciones

Iniciado por DarkMatrix, 18 Junio 2012, 03:55 AM

0 Miembros y 2 Visitantes están viendo este tema.

Mad Antrax

#30
Cita de: rapbyone en 14 Octubre 2013, 17:25 PM
jajaj lo siento amigo  ;D es que es para un proyecto muy importante, la idea es que pueda actualizar archivos y carpetas, ya tengo mi programa, pero seria muy útil que al  abrir el programa, le avisara al usuario que hay una nueva versión y que actualizara los archivos.

Muchas gracias amigo,  ;-)

Bueno ya lo tengo terminado (ahora solo falta el diseño, ventanas, control de errores, mensajes al usuario, etc.... Pero la "base" ya está funcionando perfectamente. Además, dada la naturaleza del propio updater, también sirve como Web-Installer; es decir, que el propio actualizador se podría utilizar como instalador del programa. El funcionamiento es muy sencillo:

El programador genera una lista que incluye el nombre de los ficheros de su APP, su tamaño en bytes y su hash CRC32. Dicha lista se almacena en la web/ftp. El updater descarga esa lista y efectua 3 comparaciones:

Si existe el fichero del listado en el equipo -> Si no existe lo descarga
Si el fichero en local tiene los mismos bytes que el fichero remoto -> Si no coincide lo descarga
Si el fichero en local tiene un CRC32 distinto al fichero remoto -> si no coincide lo descarga.

Además permite auto-actualizar el modulo principal de tu APP, incluso si está en ejecución. Y si añadimos un fichero llamado whatsnew.txt, lo descarga y lo ejecuta para que el user vea los cambios de tus actualizaciones. Tambien el programa permite el parámetro /auto, para lanzar la auto-actualización de golpe

Bueno, lo dicho, voy a terminar de trabajar el diseño y abre un hilo nuevo :)
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

rapbyone

Cita de: ||MadAntrax|| en 14 Octubre 2013, 23:02 PM
Bueno ya lo tengo terminado (ahora solo falta el diseño, ventanas, control de errores, mensajes al usuario, etc.... Pero la "base" ya está funcionando perfectamente. Además, dada la naturaleza del propio updater, también sirve como Web-Installer; es decir, que el propio actualizador se podría utilizar como instalador del programa. El funcionamiento es muy sencillo:

El programador genera una lista que incluye el nombre de los ficheros de su APP, su tamaño en bytes y su hash CRC32. Dicha lista se almacena en la web/ftp. El updater descarga esa lista y efectua 3 comparaciones:

Si existe el fichero del listado en el equipo -> Si no existe lo descarga
Si el fichero en local tiene los mismos bytes que el fichero remoto -> Si no coincide lo descarga
Si el fichero en local tiene un CRC32 distinto al fichero remoto -> si no coincide lo descarga.

Además permite auto-actualizar el modulo principal de tu APP, incluso si está en ejecución. Y si añadimos un fichero llamado whatsnew.txt, lo descarga y lo ejecuta para que el user vea los cambios de tus actualizaciones. Tambien el programa permite el parámetro /auto, para lanzar la auto-actualización de golpe

Bueno, lo dicho, voy a terminar de trabajar el diseño y abre un hilo nuevo :)

Excelente amigo, muchas gracias :D

Mad Antrax

Cita de: rapbyone en 15 Octubre 2013, 00:37 AM
Excelente amigo, muchas gracias :D

Bueno, por hoy ya he terminado, te explico hasta donde he llegado:

Tengo finalizado el programa para generar automáticamente el updater.lst, básicamente tú le indicas la carpeta donde tienes instalado el programa actualizado y te genera un fichero con el siguiente contenido:

vb6.jpg
151089
$7764735F
whatsnew.txt
51
$54FF24BD
windowslogo.png
151053
$A07BF49A
fotos\executable.jpg
94423
$F7F46B42
fotos\foto_linux.jpeg
81570
$A2963B48
hola\virusfoto.jpg
114480
$3B9600A0


No tienes que editarlo a mano, ya que el programa te lo calcula automáticamente, aparece el fichero y su ruta, tamaño y el CRC32, con esas 3 datos ya funciona correctamente el updater.

Y luego, el programa (actualizador principal) funciona d ela siguiente manera; se descarga el updater.lst y lee el fichero de 3 en 3 líneas, en cada lectura obtiene el fichero, tamaño y CRC, los compara con el fichero local y si uno de los 3 datos no es correcto, descarga la copia del fichero en remoto (el fichero actualizado). Si el fichero está dentro de una carpeta, también crea la carpeta y actualiza los ficheros de su interior.

** Por el momento el programa trabaja con los ficheros de la raíz y un 1º nivel de sub-carpeta, mañana cuando vuelva del trabajo hago un bucle recursivo para que pueda ir desde el nivel 2 de sub-carpeta hasta el nivel N (infinito).

El programa acepta el parámetro /auto para que auto-actualice y si descarga el fichero whatsnew.txt lo ejecuta y lo muestra al usuario para que vea los cambios actualizados.

El programa sirve como WebInstaller o Actualizador, puede actualizar incluso si la aplicación principal está en ejecución. Cosas que me faltan terminar?

- Nivel N-Subcarpeta (mañana lo termino)
- Posibilidad de auto-actualizar el propio instalador. (No se hasta que punto es interesante implementar la opción...)

El código es "bonito", corto y sencillo. Como a mi me gustan, es el siguiente:

Código (vb) [Seleccionar]
Function StartUpdate()
    Dim RootPath As String
    Dim WhatsNew As Boolean
   
    Set Files = CreateObject("Scripting.FileSystemObject")
    WhatsNew = False
    m_CRC.Algorithm = 1
   
    Open App.Path & "\smart.cfg" For Input As #1
        Line Input #1, RootPath
    Close #1
    DoEvents
   
    If DownloadFile(RootPath & "updater.lst", "updater.lst") = False Then
        MsgBox "Error al descargar el fichero de actualización"
    Else
        Open App.Path & "\updater.lst" For Input As #1
            Do While Not EOF(1)
                Line Input #1, Archivo
                Line Input #1, Bytes
                Line Input #1, CRC
                Label1.Caption = Archivo & " (" & Bytes & ") = " & CRC
                If Files.FileExists(App.Path & "\" & Archivo) Then
                    If FileLen(App.Path & "\" & Archivo) = Bytes Then
                        CRC2 = "$" & Hex(m_CRC.CalculateFile(App.Path & "\" & Archivo))
                        If CRC <> CRC2 Then
                            Call DownloadFile(RootPath & Archivo, Archivo)
                            If Archivo = "whatsnew.txt" Then WhatsNew = True
                        End If
                    Else
                        Call DownloadFile(RootPath & Archivo, Archivo)
                        If Archivo = "whatsnew.txt" Then WhatsNew = True
                    End If
                Else
                    Call DownloadFile(RootPath & Archivo, Archivo)
                    If Archivo = "whatsnew.txt" Then WhatsNew = True
                End If
                DoEvents
            Loop
        Close #1
        DoEvents
        Kill App.Path & "\updater.lst"
        If WhatsNew = True Then ShellExecuteA 0&, "Open", App.Path & "\whatsnew.txt", vbNullString, vbNullString, 1
    End If
End Function

Function DownloadFile(ByVal URL As String, ByVal Target As String) As Boolean
    On Error GoTo dError
   
    Set oHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
    Set oStream = CreateObject("ADODB.Stream")
   
    URL = Replace(URL, "\", "/")
    oHTTP.Open "GET", URL, False
    oHTTP.Send

    If (oHTTP.Status = 200) Then
        oStream.Open
        oStream.Type = 1
        oStream.Write oHTTP.ResponseBody
        If InStr(Target, "\") > 0 And Target <> "updater.lst" Then
            Call MkDir(Split(Target, "\")(0))
        End If
        oStream.SaveToFile App.Path & "\" & Target, 2
        oStream.Close
        DownloadFile = True
        Exit Function
    End If
dError:
    DownloadFile = False
End Function


Por cierto, como has pensado en pagarme el trabajo que estoy haciendo? Yo no programo gratis... te mando un MP informando de mis precios por horas.

Saludos y hasta mañana! :D
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

rapbyone

 :huh: no me dijiste que cobrabas :( pequeño detalle, lo siento amigo, pero no tengo los medios para pagarte, disculpa las molestias

Mad Antrax

Cita de: rapbyone en 15 Octubre 2013, 02:43 AM
:huh: no me dijiste que cobrabas :( pequeño detalle, lo siento amigo, pero no tengo los medios para pagarte, disculpa las molestias

jajjaa, era broma hombre!! Has picado de lleno.

Yo no cobro por programar. A la tarde cuando llegue a casa termino el programa y lo subo ok? No te preocupes.
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

rapbyone

Cita de: ||MadAntrax|| en 15 Octubre 2013, 10:46 AM
jajjaa, era broma hombre!! Has picado de lleno.

Yo no cobro por programar. A la tarde cuando llegue a casa termino el programa y lo subo ok? No te preocupes.

me asustaste  ;) muchas gracias amigo  ;-)

Mad Antrax

Bueno, ya lo tengo terminado. Voy a crear un nuevo hilo para publicar mi código. Dejaré colgado aquí el link para que lo veas
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

rapbyone

Cita de: ||MadAntrax|| en 15 Octubre 2013, 23:21 PM
Bueno, ya lo tengo terminado. Voy a crear un nuevo hilo para publicar mi código. Dejaré colgado aquí el link para que lo veas

Gracias por ayudar de forma desinteresada , te debo una amigo :D

Mad Antrax

No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.