viernes, 6 de febrero de 2009

Actualización automatica de aplicaciones via FTP

updftp01
En esta entrada del blog vamos a diseñar un sistema para automatizar las actualizaciones de las versiones de nuestros programas.
Para ello, necesitaremos disponer de un servidor FTP. El motivo de usar un servidor FTP, es que nos va a permitir tanto una solución vía intranet como Internet.

Vamos a explicar la teoría de este sistema, y después iremos con la practica y el código fuente.

1º Dispondremos de un servidor FTP, en el cual montaremos una estructura de carpetas, donde el nombre de la carpeta, será el de la aplicación, y dentro de esta carpeta alojaremos la última versión de nuestro programa ejecutable.

2º Especificaremos a nuestro programa, la información necesaria para poderse conectar al servicio FTP( ip, usuario,...), con esa información se conectara, y comprobara la antigüedad del fichero alojado en el servidor, la comparara con él mismo, y si la versión del FTP es más nueva, procedera a la descarga del fichero ejecutable, en un fichero temporal en nuestra unidad local.

3º Si había actualizaciones para descargar, y la descarga se ha completado con éxito, ejecutaremos otro proceso, que borrara la versión antigua, re nombrara y lanzara su ejecución.
updftp01
Y con esto ya tendremos actualizado nuestro programa. Viendo la teoría, no parece muy complicado ;-)

Esta solución, la tengo implementada como parte de una clase (tAppl), que utilizo en todas mis aplicaciones, aquí para poderos poner un ejemplo auto contenido, y no complicarnos explicando la creación de las clases, lo realizaremos con funciones, aunque luego el lector lo podrá adaptar a una clase o de la manera que le parezca mas cómoda para su forma de trabajo.

Nuestra aplicación, empezara definiendo la dirección del servidor FTP, y la carpeta donde comprobar el fichero a actualizar, seguidamente ejecutaremos la función ChkUpdFtp, y aquí se bifurcara, dependiendo de si hay que actualizar o no.
Funcion Main
Veamos ahora la función(ChkUpdFtp) encargada de determinar si existen versiones nuevas de nuestro programa, para ello utilizaremos las clases tInternet y fFtp.
Lo primero que haremos será comprobar si disponemos de los parámetros necesarios para conectarnos, y si existe el programa ActVer(mas adelante veremos su código fuente) que será el encargado de renombrar y relanzar nuestro programa. Pasado este primer filtro, pasamos a intentar realizar la conexión con el FTP, si dicha conexión tiene éxito, solo nos resta comprobar las fecha y hora de creación de los archivos y determinar si debe o no actualizarse, en caso de que se deba actualizar llamaremos a la función Actualiza.
Funcion Main
En este proceso usamos funciones que no vamos a comentar su funcionamiento, simplemente os incluyo su codigo fuente (prg y C). ( TimeToSec, FileTimes, FileSize ) O bien podeis utilizar alguna alternativa vuestra si en vuestro set de funciones ya las teneis definidas.

La función actualiza, es la encargada de descargar el nuevo fichero ( GetFile ), y visualizar en pantalla una barra de evolución de la descarga .
Funcion Main

Al llegar a este punto, si la función Actualiza nos devuelve verdadero, significará que ya tenemos descargado nuestra nueva versión en la carpeta local, solo debemos cerrar la versión actual, e invocar ActVer que se encargará de borrar la versión anterior, y renombrar el fichero que acabos de recibir, y posteriormente ejecutarlo.

Veamos el sencillo código de ActVer.exe, recibe como parámetro el fichero a actualizar, borra la versión anterior, renombra y ejecuta.
ActVer
Y con esto ya tenemos implementado nuestro sistema de actualizacion via Ftp de nuestras aplicaciones.
Dos cosas importantes a tener en cuenta si vuestro servidor de FTP es LINUX, los nombre de ficheros, en linux son case sensitive, y la hora de creacion del fichero se guarda en UTC.
UpdFtp.prg
ActVer.prg
UpdFtp.exe y ActVer.exe

Nota: me comentan que al compilar con xHarbour falta la función HB_IsChar, simplemente sustituir HB_ISCHAR( cTime ) por ValType(cTime)=='C'.

10 comentarios:

Anónimo dijo...

Gran aporte, me ha sido de mucha utilidad.
Sigue así muchas gracias.

Anónimo dijo...

Excelente Biel!!!!!

Anónimo dijo...

Muy bueno, andaba detras de un sistema de actualizacion y me ha sido muy util.
Gracias Biel.

Anónimo dijo...

Muchas gracias por compartir tu coodigo, excelente.

ulises dijo...

A mi no me funciona , es en la funcion getfile, antes de entrar al while para copiar, consulto mediante un msgalert el valor del while al inicio y me da 0.
yo considero que falta una linea donde va leyendo bytes y asignadolos a cBuffer
Agradecere tu apoyo para echarla a volar (admsoporte@gmail.com

BielSys dijo...

Hola Ulises,
en la mimsma linea del wile se hace la lectura del FTP y la asignación a la variable. Si te da 0 puede que sea un problema con la conexión/lectura del FTP.

Anónimo dijo...

Genial fill someone in on and this fill someone in on helped me alot in my college assignement. Thanks you seeking your information.

Anónimo dijo...

Muchas gracias! parte de tu código me ha servido para otro propósito.

Saludos Cordiales.
Juan Castillo Arteaga

Anónimo dijo...

[url=http://www.23planet.com]casinos online[/url], also known as accepted casinos or Internet casinos, are online versions of method ("buddy and mortar") casinos. Online casinos concurrence gamblers to dissemble and wager on casino games barrel the Internet.
Online casinos habitually image odds and payback percentages that are comparable to land-based casinos. Some online casinos trumpet forth on higher payback percentages as a palliate for blank gismo games, and some convert known payout beguile audits on their websites. Assuming that the online casino is using an aptly programmed unspecific quantity a recapitulate up generator, catalogue games like blackjack enthral familiarity an established borderline edge. The payout partial after these games are established at expected the rules of the game.
Split online casinos sublease or understand their software from companies like Microgaming, Realtime Gaming, Playtech, Worldwide Alternate way Technology and CryptoLogic Inc.

Anónimo dijo...

[url=http://www.onlinecasinos.gd]casinos online[/url], also known as accepted casinos or Internet casinos, are online versions of slice ("hunk and mortar") casinos. Online casinos dissemble someone yield gamblers to dissemble and wager on casino games from start to polish off slay the Internet.
Online casinos typically introduce up in arrange of exchange odds and payback percentages that are comparable to land-based casinos. Some online casinos behest on higher payback percentages with a censure board battalion games, and some bring nearly known payout behalf audits on their websites. Assuming that the online casino is using an aptly programmed unsystematically abundant generator, eatables games like blackjack comprise an established obtain edge. The payout participation as a replacement representing these games are established via the rules of the game.
Incalculable online casinos sublease or triumph their software from companies like Microgaming, Realtime Gaming, Playtech, Foolhardy Devices Technology and CryptoLogic Inc.