[ SRC ] Actualizador de Aplicaciones

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

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

DarkMatrix

Bueno dado que se cayo el servidor donde antes estaba subido este codigo, lo resubi y lo mejore un poco.

Actualizador de Aplicaciones:



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

Bueno se aceptan recomendaciones, mejoras, sugerencias, dudas XD

Suerte y espero que les sirva de algo :P


Todo aquello que no se puede hacer, es lo que no intentamos hacer.
Projecto Ani-Dimension Digital Duel Masters (Juego de cartas masivo multijugador online hecho en Visual Basic 6.0)

Desing by DarkMatrix

P4nd3m0n1um


FranciskoAsdf

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 :)
Asdf debería ser algún tipo de función.

79137913

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!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

The Swash

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.

79137913

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!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

s00rk

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

Código (xml) [Seleccionar]
<UPDATES>

<File nombre="a.exe">
<MD5>Aqui MD5 de a</MD5>
</File>

<File nombre="b.exe">
<MD5>Aqui MD5 de b</MD5>
</File>

</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"

Elemental Code

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

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas

DarkMatrix

#8
Cita de: Francisasdasd 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 :)

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.

Cita de: 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!!!

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

Cita de: 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 (xml) [Seleccionar]
<UPDATES>

<File nombre="a.exe">
<MD5>Aqui MD5 de a</MD5>
</File>

<File nombre="b.exe">
<MD5>Aqui MD5 de b</MD5>
</File>

</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!

Todo aquello que no se puede hacer, es lo que no intentamos hacer.
Projecto Ani-Dimension Digital Duel Masters (Juego de cartas masivo multijugador online hecho en Visual Basic 6.0)

Desing by DarkMatrix

mixtoconhuevo

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.