Automatización de actualizaciones

268 views
Skip to first unread message

Pablo Flores

unread,
Apr 3, 2022, 7:38:22 PM4/3/22
to Comunidad de Visual Foxpro en Español

Hola a todos…

                Tengo un sistema desarrollado en v.fox y tablas nativas. El cual como todos va sufriendo actualizaciones y como tal hay que instalarlas en los clientes.

Hasta ahora me vengo manejando de la siguiente manera

                _ Sistema.exe (y otras carpetas) que son propias del programa

                _ Actualizar.exe (programa que actualiza la versión en el cliente)

                (ambos instalados en la pc del cliente)

El tema es que cada vez que termino una nueva versión tengo que hacer lo siguientes pasos:

  1. Comprimir todo lo que tengo que enviar a cada cliente en un .zip
  2. Pasarlo al cliente (mediante TeamViewer)
  3. Respaldar la información actual
  4. Eliminar todas las carpetas y .exe que serán reemplazados por actualizar.exe
  5. Ejecutar actualizar.exe para que quede definitivamente el sistema actualizado del cliente

 

Lógicamente esto lleva mucho tiempo y trabajo solo. Es por esto que me gustaría escuchar consejos de como hacerlo.

Lo que pensé es..

1.       Mediante dropbox pasarlo a cada cliente y luego que sistema.exe (verifique si en la pc local si hay una nueva versión) sugiera al cliente que ejecute el actualizar.exe

2.       Que sistema.exe verifique mediante ftp si hay alguna novedad en un servidor (No conozco mucho sobre como llegar a un servidor mediante ftp o si hay servidores gratis o de bajo costo)

 

Esta son mis humildes ideas. Pero pregunto ya que imagino que muchos de ustedes deben tener esto resuelto.

Desde ya muchas gracias de antemano

 

 

Pablo Flores

Ceres – Santa Fe - Argentina

 

Enviado desde Correo para Windows

 

Allan Raúl Acuña

unread,
Apr 3, 2022, 9:21:41 PM4/3/22
to Comunidad de Visual Foxpro en Español
En relacion a las actualizaciones de versiones, te puedo mostrar remotamente como lo hago.

Consultas al whatsapp:  https://wa.link/iqnyft 


Saludos cordiales.

Lic. Allan Raúl Acuña
Analista Programador
msn= allan...@hotmail.com
skype= NicEasySoft
            +(505) 8 999 8950
Managua, Nicaragua
Centroamerica

De: publice...@googlegroups.com <publice...@googlegroups.com> en nombre de Pablo Flores <pf.prog...@gmail.com>
Enviado: domingo, 3 de abril de 2022 17:38
Para: Comunidad de Visual Foxpro en Español <publice...@googlegroups.com>
Asunto: [vfp] Automatización de actualizaciones
 
--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/A06248AD-4E68-4FE3-B50B-3D0AFDD1FB5D%40hxcore.ol.

Zarlu

unread,
Apr 4, 2022, 8:50:41 AM4/4/22
to Comunidad de Visual Foxpro en Español
Buenos días Pablo!

Te comparto mi mediana experiencia.

Para mi red local tengo un directorio en el servidor con el ejecutable "nuevo".
Entonces primero ejecuto un EXE lanzador que compara el archivo en el servidor contra el de la pc.
Si es más actual lo reemplaza.
En éste caso de red local las modificaciones a las tablas las hago directo a ellas.
Esto porque laboro en la misma empresa

Para los usuarios/aplicaciones externos actualizo mediante instalador.
El instalador/actualizador contiene el nuevo EXE  y otros archivos que en su caso se agregan a la aplicación
No incluyo nuevas tablas o tablas modificadas. el nuevo EXE al ejecutarse busca "X" dato/característica, sino le encuentra ejecuta la rutina de actualización.
La rutina de actualización incluye crear, remover, eliminar tablas/campos/registros.
Algunas veces el respaldo lo incluyo en la rutina de actualización.
El archivo actual.exe se los comparto en OnDrive

El respaldo es imprescindible y frecuente en cualquier caso, con o sin actualizaciones de por medio.
Yo respaldo, sobre escribo  (y en su caso elimino).

De los puntos que refieres creo que ...
El modo de envío depende del tamaño del actualizador. Igual y los pones en un servidor de internet como mencionas
Creo que lo anterior y lo demás es pesado por  hacerse manual, y más si es frecuente. Desahoga automatizar todo éste proceso.

Suerte
zarlu
Chetumal, Quintana Roo, México

Victor Espina

unread,
Apr 4, 2022, 11:41:48 AM4/4/22
to Comunidad de Visual Foxpro en Español
Definitivamente necesitas que el proceso sea automático.  En mi caso lo hago en dos fases:

1.  Tengo un programa loader que es el que esta asociado al acceso directo de la app y el que se encarga de ejecutar el EXE principal.  Este loader tiene un proceso de "AUTO UPDATE" que va a un servidor FTP, ve si hay una version nueva del programa, si la hay la descarga a una carpeta temporal, hace una copia del EXE actual y luego instala la nueva version.   

2.  El programa principal tiene una rutina interna que compara la versión instalada (que se guarda en un archivo local) vs la version del EXE que se esta ejecutando.  Si son distintas, va ejecutando rutinas de actualización hasta llegar a la version actual.  Cada rutina de actualización valida que la version "actual" sea anterior a la requerida para la actualización y cuando finaliza actualiza la version.   Por ejemplo, digamos que tu version original era la 1.0 y ahora actualizaste a la 1.1.  Se crearía una rutina asi:

PROCEDURE Update1_1
  IF gnCurrentVersion > 1.0
    RETURN
  ENDIF
  .....(ejecutar actualizaciones)...
  gnCurrentVersion = 1.1
  STRTOFILE(STR(gnCurrentVersion,"VERSION.TXT")
  RETURN

Luego actualizaste a la 1.2, entonces añades una nueva rutina de actualizacion:

PROCEDURE Update1_2
  IF gnCurrentVersion > 1.1
    RETURN
  ENDIF
  .....(ejecutar actualizaciones)...
  gnCurrentVersion = 1.2
  STRTOFILE(STR(gnCurrentVersion,"VERSION.TXT")
  RETURN

Y asi sucesivamente.  Entonces, tu rutina principal de actualización seria:

#DEFINE  gnAppVersion    1.2
...
PUBLIC gnCurrentVersion
gnCurrentVersion = VAL(FILETOSTR("VERSION.TXT"))

* APP FUE ACTUALIZADA. 
IF gnAppVersion > gnCurrentVersion
  update1_1()
  update1_2()
  IF gnCurrentVersion < gnAppVersion
     MESSAGEBOX("Fallo proceso de actualización. Por favor, intente de nuevo",11,1)
     RETURN
  ENDIF
ENDIF


Entonces, en resumen:

1. El ejecutable es actualizado por un loader que se encarga de bajar la nueva version desde la nube e instalarla
2. La BD y otros elementos son actualizados directamente por la app cuando detecta que hubo un cambio de version

Saludos

Victor Espina

Pablo Flores

unread,
Apr 4, 2022, 12:56:10 PM4/4/22
to publice...@googlegroups.com
Muchas gracias a todos por las respuestas.
Víctor como envías y recibes mediante FTP? Lo haces dese vfp?  Y el servidor es pago o gratis? Puedes decirme cuál es?
Desde ya gracias
Saludos


From: publice...@googlegroups.com <publice...@googlegroups.com> on behalf of Victor Espina <vesp...@gmail.com>
Sent: Monday, April 4, 2022 12:41:48 PM
To: Comunidad de Visual Foxpro en Español <publice...@googlegroups.com>
Subject: [vfp] Re: Automatización de actualizaciones
 

Victor Espina

unread,
Apr 6, 2022, 9:42:45 AM4/6/22
to Comunidad de Visual Foxpro en Español
SI, lo hago desde VFP usando un hosting que arriendo anualmente.  Para hacerlo, utilizo una librería de Robert Abram, llamada FTP_SERVICE. La puedes descargar desde aquí:

Este es un ejemplo de como subir un archivo:

  *-- Se abre una conexion con el servidor FTP
  LOCAL oFTP
  oFTP = CREATEOBJECT('ftp_service')
  oFTP.lUsePassiveMode = .T.
 
  ?"Opening connection..."
  IF NOT oFTP.openInternet("your-ftp-user-name","your-password","ftp-server-address","21")
   ?oFTP.GetLastERror()
   RETURN              
  ENDIF
  ??"OK"
 
  ?"Changing folder..."
  IF !oFTP.ChangeFtpDirectory("/target/folder")
   ?oFTP.GetLastERror()
   oFTP.closeInternet()  
   RETURN
  ENDIF
  ??"OK"
 
 
  *-- Se intenta subir el paquete al FTP
  cFile = "path-to-your-local-file"
  ?"Uploading file..."
  IF NOT oFTP.putFtpFile(JUSTFNAME(cFile),cFile, 1)
   ?oFTP.GetLastERror()
   ?oFTP.GetExtendedErrorMsg()
   oFTP.closeInternet()
   RETURN
  ENDIF
  oFTP.closeInternet()
  ??"OK"


Ahora, para descargar el archivo uso esta función:

Y la forma de usarla es bien sencilla:

LOCAL cBuff
STRTOFILE(cBuff, "path-to-target-file")


Espero sea de ayuda


Victor Espina



Walter Valle

unread,
Apr 7, 2022, 3:33:35 PM4/7/22
to Comunidad de Visual Foxpro en Español
Hola a todos... Hey Víctor, que gusto verte por acá maestro!

Hago un procedimiento similar al de Víctor, tengo un "Loader.EXE" que verifica la versión Local de la "App.EXE" contra la versión Web:
- Si hay una versión nueva en Web, descargo la App.EXE como App.UPD y actualizo la versión local.
- Dentro de App.EXE tengo embebido el Loader.EXE puesto que ya me ha tocado hacer una actualización del mismo ya que el Loader.EXE siempre es pequeñito... no mas de 30 Kb.
- App.EXE no se puede levantar por si sola si no pasa por Loader.EXE.

Así pues en el proceso tengo varias validaciones que hago en el Loader, controlo errores etc... luego en App.EXE también puedo actualizar el Loader.EXE de forma fácil, tengo un rutina que me transforma el Loader.EXE (También cualquier archivo) en un PRG y luego lo escribo a bajo nivel con las propias funciones FCREATE, FPUT de VFP.

De esta forma puedo actualizar 80 PCs, cuando el usuario abre la App en de forma automática y en cuestión de 5 a 10 segundos hago todo el proceso, lógicamente, dependes del ancho de banda que se ocupa para hacer las descargas.

No uso FTP, uso la misma rutina GETURL que Víctor te dice, tanto para verificar versiones, como para bajar el update.

Saludos!

Victor Espina

unread,
Apr 8, 2022, 10:38:35 AM4/8/22
to Comunidad de Visual Foxpro en Español
Epale Walter, que de tiempo amigo!!   Gusto en verte por aqui también. 

Un abrazo

Victor Espina
Reply all
Reply to author
Forward
0 new messages