Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: DarkMatrix en 18 Junio 2012, 03:55 am



Título: [ SRC ] Actualizador de Aplicaciones
Publicado por: DarkMatrix en 18 Junio 2012, 03:55 am
Bueno dado que se cayo el servidor donde antes estaba subido este codigo, lo resubi y lo mejore un poco.

Actualizador de Aplicaciones:

(http://i45.tinypic.com/vl6wo.jpg)

La aplicacion es muy sencilla y funciona de la siguiente manera: cuando se ejecuta la aplicacion esta descarga del servidor de actualizaciones el archivo "UpdateList.zip", que es el archivo que contiene la lista de archivos actualizados de la aplicacion, luego lo carga en memoria y empieza a comparar los archivos actualizados con los archivos que estan en la carpeta local de la aplicacion, si existen archivos nuevos o archivos mas actualizados la aplicacion los descarga.

Para generar el archivo UpdateList.zip la aplicacion (Actualizador.exe) debe estar en la carpeta local que tiene la aplicacion actualizada y ejecutar el actualizador con el parametro "GenerateUpdateList". Esto generara el archivo updatelist.zip y tambien comprimira todos los archivos que hayan sido especificados en el archivo config.ini.

Ojo: El Actualizador no esta programado para actualzarse a si mismo.

Ejemplo de Uso:

Mi aplicacion se llama MiPrograma.Exe y depende de los archivos Ejemplo1.txt y Ejemplo2.txt, y los tengo almacenados en una carpeta llamado MiPrograma.

El primer paso es incluir todos los archivos del actualizador que son 4 ( Actualizador.exe, Unzip32.dll, Zip32.dll y Config.ini) en la carpeta principal "MiPrograma".

El segundo paso es especificar la URL del host donde estaran al macenados los archivos actualizados, para eso abrimos el archivo Config.ini y cambiamos el valor "UpdateServer" por el host donde tendremos nuestros archivos y quedaria algo asi "UpdateServer=http://ejemplo.com/ejemplo".

Ahora especificamos las extensiones de archivos que queremos que sean comprimidos, se recomienda que los .exe y .dll sean comprimidos ya que algunos servidores no dejan bajar este tipo de archivo por seguridad. Para cambiar las extensiones abrimos el archivo Config.ini y modificamos el valor "ZipThisFileTypes" y colocamos las extensiones que queramos, por defecto queda asi: "ZipThisFileTypes=.exe,.dll", cada extension separada con una coma e incluyendo el punto.

Una vez hecho esto ya se puede generar el archivo UpdateList.zip, para esto ejecutamos la aplicacion con el comando "GenerateUpdateList", esto generara el archivo updatelist.zip y tambien comprimira todos los archivos que especificamos en la lista de extensiones. Ahora debemos subir todos los archivos de la carpeta MiPrograma al host donde almacenaremos los archivos ( url especificada en el archivo config.ini ) exceptuando solo aquellos archivos que fueron comprimidos ( subir solo el comprimido y no el original, por ejemplo si se comprimio MiPrograma.exe a MiPrograma.zip subimos el .zip y no el .exe).

Con esto ya la aplicacion estara lista para actualizar a todos los clientes que ya tengan una version vieja de la aplicacion.

Para comprobarlo borra o cambia cualquiera de los archivos que estan en la carpeta "MiPrograma" y ejecuta el actualizador, por ejemplo si borramos MiPrograma.exe y ejecutamos el actualizador veremos que se descagara MiPrograma.exe nuevamente ya que al no existir en la carpeta local pero si en el servidor de actualizaciones, la aplicacion lo descarga.

Descarga Exe + Codigo Fuente:

http://www.mediafire.com/?pgdp4q3ufpyda77 (http://www.mediafire.com/?pgdp4q3ufpyda77)

Bueno se aceptan recomendaciones, mejoras, sugerencias, dudas XD

Suerte y espero que les sirva de algo :P



Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: P4nd3m0n1um en 18 Junio 2012, 04:50 am
Buen dato, gracias DarkMatrix.


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: FranciskoAsdf en 18 Junio 2012, 16:52 pm
Tengo una duda, cuantos son los archivos que es capaz de comprmir y actualizar sin que el programa colapse?.

Y si por ejemplo el servidor donde estan alojadas las updates se cae, o se cae la conexión, el programa dará un mensaje de error o se quedará pegado?

Quiero aclarar que son solo preguntar mas no criticas ni nada por el estilo.

Saludos, muy buen aporte :)


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: 79137913 en 18 Junio 2012, 18:05 pm
HOLA!!!

Consulta como analiza si son los archivos o estan actualizados?

Hace un hash del archivo en la pc y lo compara con el hash de el de internet, si es asi deberia bajar el de internet para calcular su hash y eso no seria practico...

Osea, yo tengo en mi pc programa V1 y en el server tengo Programa V2...

Suponiendo que los dos se llamen a.exe como va a saber tu actualizador si el subido a internet es actualizado o no?

Y suponiendo que le coloques nombres distintos y el user haya puesto un acceso directo a nuestro exe, al bajarse el exe 2 el user clickea el acceso directo al exe 1 y va al exe 2 o al 1?

Son las dudas que me surgen sin probar ni descargar el soft...

Espero aclaraciones XD

GRACIAS POR LEER!!!


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: The Swash en 18 Junio 2012, 20:34 pm
Hola,

79137913 y si en el sitio web tiene en texto plano en nuevo HASH supongamos que MD5 y tu haces tu MD5, sin necesidad de descargarlo sabrías si tienes que actualizar o no. Solo deberías descargar unos cuantos bytes correspondientes a la cadena del HASH.

PD: No lo probé, lo menciono como una alternativa.

Un saludo,
Iván Portilla.


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: 79137913 en 18 Junio 2012, 20:44 pm
HOLA!!!

Exacto TheSwash, lo se pero quiero saber si este sistema lo incluye o por lo menos saber como funciona, ya veo que usa una tecnica de comprobacion que no conozco y puedo aprender algo :D

GRACIAS POR LEER!!!


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: s00rk en 18 Junio 2012, 20:47 pm
La mejor forma a mi parecer es que el Actualizador descargue un XML con los que se deseean actualizar

Código
  1. <UPDATES>
  2.  
  3. <File nombre="a.exe">
  4. <MD5>Aqui MD5 de a</MD5>
  5. </File>
  6.  
  7. <File nombre="b.exe">
  8. <MD5>Aqui MD5 de b</MD5>
  9. </File>
  10.  
  11. </UPDATES>

Y pues ya el programa descarga ese archivo del servidor y lee los nodos y ya lee el atributo nombre y compara su md5 con el que esta en la carpeta del programa y si es diferente actualiza y sino pues lee el siguiente nodo.

A mi parecer seria lo mas sencillo y eficiente.

----

EDIT

Descargue el src y me dice que falta el modulo "Mod_ini.bas"


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: Elemental Code en 18 Junio 2012, 22:28 pm
che, yo lo hago con 2 cositos.

Comparo la major, minor y revision de mi exe con las de un txt online.

Si no coinciden, UPDATE


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: DarkMatrix en 19 Junio 2012, 01:02 am
Tengo una duda, cuantos son los archivos que es capaz de comprmir y actualizar sin que el programa colapse?.

Y si por ejemplo el servidor donde estan alojadas las updates se cae, o se cae la conexión, el programa dará un mensaje de error o se quedará pegado?

Quiero aclarar que son solo preguntar mas no criticas ni nada por el estilo.

Saludos, muy buen aporte :)

Hasta donde probe es capaz de comprimir o descargar mas de 2mil archivos sin colapsar..., en caso de que el servidor donde estan los updates no este disponible el programa muestra en el estado que no se ha podido conectar al servidor.

HOLA!!!

Consulta como analiza si son los archivos o estan actualizados?

Hace un hash del archivo en la pc y lo compara con el hash de el de internet, si es asi deberia bajar el de internet para calcular su hash y eso no seria practico...

Osea, yo tengo en mi pc programa V1 y en el server tengo Programa V2...

Suponiendo que los dos se llamen a.exe como va a saber tu actualizador si el subido a internet es actualizado o no?

Y suponiendo que le coloques nombres distintos y el user haya puesto un acceso directo a nuestro exe, al bajarse el exe 2 el user clickea el acceso directo al exe 1 y va al exe 2 o al 1?

Son las dudas que me surgen sin probar ni descargar el soft...

Espero aclaraciones XD

GRACIAS POR LEER!!!

Fijate el programa funciona de la siguiente Manera: Nosotros ( el programador de la aplicacion ) nos encargamos de realizar todos los cambios que queramos en nuestro programa, una vez nosotros terminamos, queremos que todos nuestros clientes tengan la version que acabamos de programar.

Para esto nosotros ejecutamos el Actualizador.exe con el parametro "GenerateUpdateList", y nos generara el archivo "UpdateList.zip" que no es mas que un archivo de texto comprimido que contiene todos los hash MD5, Tamaño y Rutas de cada uno de los archivos de nuestra aplicacion. Una vez generado el archivo debemos subirlo junto con todos los archivos actualizados de nuestra aplicacion al host de almacenamiento, despues de esto los archivos actualizados estan en el host.

Ahora nuestros clientes solo deben ejecutar el archivo Actualizador.exe (o simplemente podemos programar nuestra aplicacion para que llame al actualizador automaticamente), para que se les actualize su aplicacion con la que nosotros acabamos de subir al host. ¿Como lo hace?, simple, el actualizador descarga el archivo UpdateList.Zip, en este se encuentran todos los hash MD5 de los archivos actualizados de modo que no tengo que bajarlos todos para luego sacarle el hash, una vez descargado el programa compara los hash de cada archivo almacenado en la pc cliente con el hash almacenado en el servidor de actualizaciones (UpdateList.Zip) y si encuentra que uno de los hash son diferentes o simplemente en el servidor de actualizaciones hay archivos que no hay en la maquina cliente entonces los descarga. De este modo cuando el actualizador.exe termina, la aplicacion esta actualizada a la misma que nosotros subimos al host.

En cuanto al caso1: Aunque 2 aplicaciones se llamen igual, para que su hash sea igual deben tener el mismo contenido, si alguno de ellos es modificado en lo mas minimo su hash cambia, por lo tanto si en el host hay un archivo con un hash diferente al de la pc cliente, lo descarga automatico.

En cuanto al caso2: No es lo ideal cambiar el nombre de la app principal, aunque en el caso de que se haga el acceso directo del usuario seguiria apuntando a la aplicacion vieja...

La mejor forma a mi parecer es que el Actualizador descargue un XML con los que se deseean actualizar

Código
  1. <UPDATES>
  2.  
  3. <File nombre="a.exe">
  4. <MD5>Aqui MD5 de a</MD5>
  5. </File>
  6.  
  7. <File nombre="b.exe">
  8. <MD5>Aqui MD5 de b</MD5>
  9. </File>
  10.  
  11. </UPDATES>

Y pues ya el programa descarga ese archivo del servidor y lee los nodos y ya lee el atributo nombre y compara su md5 con el que esta en la carpeta del programa y si es diferente actualiza y sino pues lee el siguiente nodo.

A mi parecer seria lo mas sencillo y eficiente.

----

EDIT

Descargue el src y me dice que falta el modulo "Mod_ini.bas"

El actualizador hace mas o menos eso que acabas de plantear pero con un archivo plano.

Ya acomode el link con todos los modulos...

Saludos!


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: mixtoconhuevo en 20 Junio 2012, 19:50 pm
Hola DarkMatrix:
     He intentado abrir el proyecto con el Visual Studio 2010 y no me deja, con que debo abrirlo?
Muchas gracias por la aportación.


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: s00rk en 20 Junio 2012, 19:57 pm
Hola DarkMatrix:
     He intentado abrir el proyecto con el Visual Studio 2010 y no me deja, con que debo abrirlo?
Muchas gracias por la aportación.

Esta en Visual Basic 6, y Visual Studio trae Visual Basic .NET

che, yo lo hago con 2 cositos.

Comparo la major, minor y revision de mi exe con las de un txt online.

Si no coinciden, UPDATE

Facilmente alguien crea otro programa con la misma revision que la nueva a actualizar y le pone el nombre de ese archivo y listo ya no se actualizo ... no es muy seguro la forma a como lo planteas.


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: mixtoconhuevo en 20 Junio 2012, 20:07 pm
Hola s00rk:
     Pues no me deja abrir el proyecto, las extensiones no las reconoce, ya no se que hacer.
un saludo


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: raul338 en 20 Junio 2012, 20:17 pm
mixtoconhuevo, la aplicación es para abrirlo con Visual Basic 6 no con visual studio .net


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: Elemental Code en 21 Junio 2012, 03:12 am
Facilmente alguien crea otro programa con la misma revision que la nueva a actualizar y le pone el nombre de ese archivo y listo ya no se actualizo ... no es muy seguro la forma a como lo planteas.

:S
Pero lo mio es un modulo.
es
app.major
app.minor
app.revision

(SIII con el reshack cambias la version interna, lo admito.)
Un segundo... Almacenalo como constrante

Const Major = 1
Const minor = 2
Const revision = 3

:P


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: DarkMatrix en 21 Junio 2012, 03:27 am
La diferencia del tuyo Elemental Code al mio es que el mio actualiza no solo la app principal, si no tambien archivos que son necesarios para la aplicacion (Como imagenes externas, documentos de texto, etc...)


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: arley12 en 12 Enero 2013, 22:53 pm
Bueno lo use esta chevre pero el problema es que me toco montarlo en un modulo aparte osea en otra aplicacion y como consecuencia cuando descarga la actualizacion no la puede sobreescribir ya que el software esta abierto no se que hacer ya que no puedo hacer que se cierre tiene que estar abierta


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: raul338 en 13 Enero 2013, 04:02 am
Tienes que cerrarlo de alguna forma si o sí, no podes sobreescribir un ejecutable estando activo


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: BlackZeroX en 14 Enero 2013, 08:06 am
:S
Pero lo mio es un modulo.
es
app.major
app.minor
app.revision

(SIII con el reshack cambias la version interna, lo admito.)
Un segundo... Almacenalo como constrante

Const Major = 1
Const minor = 2
Const revision = 3

:P

Entonces puedo pasarme por el arco del triunfo ambos actualizadores.


[/hr]

Un consejo: Si se esta modificando la aplicación constantemente es mejor crear un motor base y usar scripts... y evitar actualizaciones exageradas.

@DarkMatrix
Hace mucho que no puedo entrar a tu juego por cosa de actualizaciones (siempre descargo la ultima versión y siempre re-actualiza un paso muerto).

P.D.: Reinstalare VB6 haber si puedo hacer algo, me entraron ganas.

Dulces Lunas!¡.


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: rapbyone en 26 Septiembre 2013, 14:01 pm
Soy un autodidacta en vb6, diseñe una aplicación, pero ahora me gustarías algo más avanzado, me gusto mucho este actualizador, pero tengo una pregunta de principiantes. a que se refiere cuando dice "ejecutamos con el parámetro "-GenerateUpdateList" ¿de qué forma lo ejecuto de esta manera?

Gracias amigos y disculpen la ignorancia   :silbar:


Título: Re:
Publicado por: rapbyone en 1 Octubre 2013, 01:15 am
Me ayudan con esto por favor.

Enviado desde mi GT-I9300 usando Tapatalk


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: DarkMatrix en 1 Octubre 2013, 18:59 pm
Para ejecutar una aplicacion con parametros vas a inicio -> ejecutar y en pones algo como esto: "C:\MiPrograma\MiPRograma.exe" -Parametro1 -Parametro2 -ParametroN


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: rapbyone en 2 Octubre 2013, 13:43 pm
Vamos bien ya logre que se creara el UpdateList.zip,  ;-) mi pregunta ahora es:

Donde configuro la ruta en donde estarán los archivos, suponiendo que los archivos se encuentran en una ruta como esta: http://www.compuganancias.com/Smileys/akyhne

¿o el actualizador funciona de otra manera?

gracias amigos  ;D


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: DarkMatrix en 2 Octubre 2013, 14:06 pm
Vamos bien ya logre que se creara el UpdateList.zip,  ;-) mi pregunta ahora es:

Donde configuro la ruta en donde estarán los archivos, suponiendo que los archivos se encuentran en una ruta como esta: http://www.compuganancias.com/Smileys/akyhne

¿o el actualizador funciona de otra manera?

gracias amigos  ;D

http://foro.elhacker.net/programacion_visual_basic/aplicacion_actualizable-t296701.0.html;msg1861832#msg1861832


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: rapbyone en 9 Octubre 2013, 19:29 pm
Gracias amigo eres un genio, pero tengo un pequeño problema, cuando creo una carpeta con un documento de texto dentro e intento ejecutar el actualizador con parametros, me arroja el siguiente error:

(http://i55.servimg.com/u/f55/14/27/29/04/ayuda_10.jpg)


El archivo Config.ini lo tengo modificado de la siguiente manera:

Código:
[SETTINGS]
UpdateServer=localhttp://www.compuganancias/updatepatch/
; Extensiones de los archivos que seran comprimidos separadas por un "|".
ZipThisFileTypes=exe|dll|ocx|txt

Cuando solo colo un archivo.exe el actualizador funciona perfecto :D
se pueden actualizar directorias con archivos dentro??

gracias amigo

Edito intente con este codigo, pero ahora no comprime los archivos:

Código:
[SETTINGS]
UpdateServer=http://www.chile-pro.com/updatepatch/
; Extensiones de los archivos que seran comprimidos separadas por un "|".
ZipThisFileTypes=.exe,.dll,.txt

 :(


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: DarkMatrix en 10 Octubre 2013, 04:54 am
Las extensiones deben estar separadas por "|" en tu caso deberia ser asi:

Código:
[SETTINGS]
UpdateServer=http://www.chile-pro.com/updatepatch/
; Extensiones de los archivos que seran comprimidos separadas por un "|".
ZipThisFileTypes=exe|dll|txt

y por lo que veo en el error del captura, no puedes comprimir un ejecutable de 0kb...


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: rapbyone en 10 Octubre 2013, 06:55 am
Las extensiones deben estar separadas por "|" en tu caso deberia ser asi:

Código:
[SETTINGS]
UpdateServer=http://www.chile-pro.com/updatepatch/
; Extensiones de los archivos que seran comprimidos separadas por un "|".
ZipThisFileTypes=exe|dll|txt

y por lo que veo en el error del captura, no puedes comprimir un ejecutable de 0kb...

Volví a intentarlo, esta ves solo cree la carpeta con el archivo de texto dentro y me aparece lo mismo, ademas que el archivo updatelist.txt no se comprime :S

(http://i55.servimg.com/u/f55/14/27/29/04/sin_ta10.png)

Al parecer no funciona con carpetas, solo con archivos  :(
Intente editando el updatelist.txt para que extrajera el exe dentro de una carpeta de la siguiente manera:

Código:
"\folder\Proyecto1.exe",2890,"f17427b8ce5cffd56e35d0d6afd4ee50","http://www.chile-pro.com/updatepatch/\Proyecto1.zip"

pero tampoco funciono 8(
gracias estimado por su ayuda


Título: Re:
Publicado por: rapbyone en 11 Octubre 2013, 22:21 pm
Se podrá hacer para que se descomprima en carpetas al actualizar?

Enviado desde mi GT-I9300 usando Tapatalk


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: rapbyone en 14 Octubre 2013, 15:09 pm
Una ayuda por favor amigos  :P o alguien conoce algún otro actualizador??


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: Mad Antrax en 14 Octubre 2013, 16:06 pm
Una ayuda por favor amigos  :P o alguien conoce algún otro actualizador??

Visto lo visto, la cantidad de dudas que está generando éste hilo.... me veo obligado a participar de alguna forma.

Entre hoy y mañana programaré un sistema de actualizaciones más sencillo y fácil de utilizar, ok? Solo necesito algo 1 día para programarlo y prometo que será el sistema más útil y sencillo que jamás encontraréis :P


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: rapbyone en 14 Octubre 2013, 17:25 pm
Visto lo visto, la cantidad de dudas que está generando éste hilo.... me veo obligado a participar de alguna forma.

Entre hoy y mañana programaré un sistema de actualizaciones más sencillo y fácil de utilizar, ok? Solo necesito algo 1 día para programarlo y prometo que será el sistema más útil y sencillo que jamás encontraréis :P

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,  ;-)


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: Mad Antrax en 14 Octubre 2013, 23:02 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 :)


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: rapbyone en 15 Octubre 2013, 00:37 am
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


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: Mad Antrax en 15 Octubre 2013, 01:01 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:

Código:
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
  1. Function StartUpdate()
  2.    Dim RootPath As String
  3.    Dim WhatsNew As Boolean
  4.  
  5.    Set Files = CreateObject("Scripting.FileSystemObject")
  6.    WhatsNew = False
  7.    m_CRC.Algorithm = 1
  8.  
  9.    Open App.Path & "\smart.cfg" For Input As #1
  10.        Line Input #1, RootPath
  11.    Close #1
  12.    DoEvents
  13.  
  14.    If DownloadFile(RootPath & "updater.lst", "updater.lst") = False Then
  15.        MsgBox "Error al descargar el fichero de actualización"
  16.    Else
  17.        Open App.Path & "\updater.lst" For Input As #1
  18.            Do While Not EOF(1)
  19.                Line Input #1, Archivo
  20.                Line Input #1, Bytes
  21.                Line Input #1, CRC
  22.                Label1.Caption = Archivo & " (" & Bytes & ") = " & CRC
  23.                If Files.FileExists(App.Path & "\" & Archivo) Then
  24.                    If FileLen(App.Path & "\" & Archivo) = Bytes Then
  25.                        CRC2 = "$" & Hex(m_CRC.CalculateFile(App.Path & "\" & Archivo))
  26.                        If CRC <> CRC2 Then
  27.                            Call DownloadFile(RootPath & Archivo, Archivo)
  28.                            If Archivo = "whatsnew.txt" Then WhatsNew = True
  29.                        End If
  30.                    Else
  31.                        Call DownloadFile(RootPath & Archivo, Archivo)
  32.                        If Archivo = "whatsnew.txt" Then WhatsNew = True
  33.                    End If
  34.                Else
  35.                    Call DownloadFile(RootPath & Archivo, Archivo)
  36.                    If Archivo = "whatsnew.txt" Then WhatsNew = True
  37.                End If
  38.                DoEvents
  39.            Loop
  40.        Close #1
  41.        DoEvents
  42.        Kill App.Path & "\updater.lst"
  43.        If WhatsNew = True Then ShellExecuteA 0&, "Open", App.Path & "\whatsnew.txt", vbNullString, vbNullString, 1
  44.    End If
  45. End Function
  46.  
  47. Function DownloadFile(ByVal URL As String, ByVal Target As String) As Boolean
  48.    On Error GoTo dError
  49.  
  50.    Set oHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
  51.    Set oStream = CreateObject("ADODB.Stream")
  52.  
  53.    URL = Replace(URL, "\", "/")
  54.    oHTTP.Open "GET", URL, False
  55.    oHTTP.Send
  56.  
  57.    If (oHTTP.Status = 200) Then
  58.        oStream.Open
  59.        oStream.Type = 1
  60.        oStream.Write oHTTP.ResponseBody
  61.        If InStr(Target, "\") > 0 And Target <> "updater.lst" Then
  62.            Call MkDir(Split(Target, "\")(0))
  63.        End If
  64.        oStream.SaveToFile App.Path & "\" & Target, 2
  65.        oStream.Close
  66.        DownloadFile = True
  67.        Exit Function
  68.    End If
  69. dError:
  70.    DownloadFile = False
  71. End Function
  72.  

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


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: 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


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: Mad Antrax en 15 Octubre 2013, 10:46 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.


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: rapbyone en 15 Octubre 2013, 13:13 pm
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  ;-)


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: Mad Antrax 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


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: rapbyone en 15 Octubre 2013, 23:29 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


Título: Re: [ SRC ] Actualizador de Aplicaciones
Publicado por: Mad Antrax en 15 Octubre 2013, 23:51 pm
Gracias por ayudar de forma desinteresada , te debo una amigo :D

http://foro.elhacker.net/programacion_visual_basic/app_source_smart_updater_anade_un_autoactualizador_a_tus_programas_facil-t400743.0.html;new#new