22 de febrero de 2020

Instalar versiones nuevas de ejecutables de VFP

Instalar versiones nuevas de ejecutables de VFP.

Autor: Mike Lewis
Texto original:
-- Installing new copies of VFP executables --
http://www.ml-consult.co.uk/foxst-30.htm
Traducido por: Ana María Bisbé York


¿Cómo instalar el archivo EXE actualizado sin forzar a los usuarios a cerrar su aplicación?

¿Alguna vez ha necesitado instalar una copia nueva de un archivo .EXE después que la aplicación empezó a funcionar? Si le ha ocurrido, sabrá que no puede simplemente copiar el nuevo archivo sobre el existente. Si trata de hacerlo mientras los usuarios están corriendo la aplicación, Windows reportará “Violación de archivos compartidos”. Su única solución es esperar a que todos hayan finalizado su sesión, lo cual puede ser inconveniente.

Andew Connor, el IT Manager en Mids & Horsey Ltd en el Reino Unido, ha llegado a una simple solución a este problema. Andrew sugiere que suministre un pequeño lanzador de programa el que busca el EXE con la versión más reciente. Una vez encontrado, toma el control del fichero que hasta ahora ejecuta la aplicación.

El programa lanzador es un sencillo programa de VFP. Es completamente genérico, no necesita saber el nombre del archivo EXE o del directorio que lo contiene. Sin embargo, es necesario seguir normas sencillas para nombrar los archivos.

Nombrar los archivos

El programa lanzador debe ser compilado a un archivo EXE, su nombre debe ser igual al de la aplicación principal. Este es el archivo que los usuarios van a lanzar cuando deseen correr la aplicación.

El nombre del archivo EXE actual de la aplicación debe contener además dos dígitos numéricos para la versión. Es decir, si la aplicación se llama Ventas, el programa lanzador se llamará Ventas.EXE. El archivo EXE principal de la aplicación puede llamarse entonces Ventas01.EXE, Ventas02.EXE, y así sucesivamente. Cada vez que desee distribuir una nueva versión del EXE principal, solo necesita cambiar el número de la versión.

Sus números de versión pueden ser cualquiera que decida, no es necesario que sean consecutivos o en orden ascendente. Pero deben tener exactamente dos dígitos.

Asegúrese de colocar el lanzador en el mismo directorio que el archivo ejecutable principal. Luego configúrelo para que los usuarios ejecuten el lanzador cuando deseen correr la aplicación.

El código

Aquí está el código para el programa lanzador. Puede pegarlo en un archivo de programa PRG y luego compilarlo y generar un .EXE

* Programa Lanzador (genérico).
LOCAL lcExecPath, lcFileName, lcSkeleton, lnFileCount
LOCAL lcExe, ltLatest, lnI
LOCAL ARRAY laFiles(1)
* Toma la ruta del directorio del archivo ejecutable
lcExecPath = JUSTPATH(SYS(16))
* Establece este directorio como predeterminado (Default)
SET DEFAULT TO (lcExecPath)
* Toma la raíz del nombre del archivo ejecutable
lcFileName = JUSTSTEM(SYS(16))
* Crea una matriz con los nombres de los EXEs posibles
lcSkeleton = lcFileName+"??.EXE"
&& lcSkeleton es un archivo comodín
&& para ADIR()
lnFileCount = ADIR(laFiles,lcSkeleton)
* Busca el archive EXE más reciente
lcEXE = ""
ltLatest = {}
FOR lnI = 1 TO lnFileCount
  IF FDATE(laFiles(lnI,1),1) > ltLatest
    ltLatest = FDATE(laFiles(lnI,1),1)
    lcExe = laFiles(lnI,1)
  ENDIF
ENDFOR
* Lanza la ejecución del EXE más reciente.
IF NOT EMPTY(lcExe)
  DO (lcEXE)
ENDIF

Como puede ver, el programa lanzador crea un arreglo que contiene los nombres de todos los archivos EXE que cumplan con la convención de nombre. Luego toma el control del más reciente de estos archivos.

Actualizar la aplicación

A partir de ahora, cuanto desee distribuir una nueva versión de su aplicación, puede copiar el EXE actualizado dentro del directorio donde están los ejecutables. Esto se puede hacer incluso si hay usuarios trabajando en la aplicación debido a que tendrá diferente número de versión que el archivo existente. La próxima vez que el usuario llame la aplicación, el lanzador encontrará automáticamente la versión correcta. En caso necesario, puede borrar la versión anterior.

Mike Lewis Consultants Ltd. Mayo 2003

5 comentarios :

  1. Se puede modificar el programa para evitar los 2 números. Basta que lea el directorio y compare las fechas de los EXEs, para saber cual es el mas reciente.

    ResponderBorrar
  2. Perdon por mi anterior comentario. Habia leido el texto sin mirar el código. Mis disculpas.

    ResponderBorrar
  3. Yo utilizo un Lanzador.exe que compara el tamaño y las fechas del EXE que se encuentre en la misma carpeta donde se encuentre el lanzador, utilizando una carpeta compartida donde el resto de PC pueden ver si hay una nueva versión.
    Así puedo actualizar la versión copiando directamente los nuevos ejecutables en la carpeta compartida, sin importar si hay gente en la aplicación. Cuando se salgan y vuelvan a entrar se actualizará automáticamente.
    Después que LANZADOR ha actualizado el EXE y lo ejecuta, éste mismo se encarga de comprobar si el propio LANZADOR es más nuevo que el anterior para actualizarlo.

    ResponderBorrar
  4. maurybatalla@gmail.com18 de junio de 2020, 9:16 a.m.

    El codigo funciona , tiene un pequeño bug se podria decir , el cual es que si el Venta.exe por ejemplo que seria el lanzador tiene una fecha mas reciente (por ejemplo la primera vez que intentes usarlo ) se llamara siempre a si mismo , habria que incluir en el codigo un exclusion que ignore el nombre del lanzador para que esto no suceda. Gracias por el aporte me fue Util !

    ResponderBorrar
  5. Yo cree el lanzador hace 5 años, el problema se presentaba al actualizar a mis clientes, el programa se abría por parte de usuarios hasta 40 veces y era imposible pedirles cerrar la aplicación, la solución, el Lanzador, solo he tenido problemas con un virus que afectó los .exe, cambió el tamaño de todos los ejecutables a 512 kb, esto debido a la comparación que realiza el lanzador sobre el tamaño, en resumen su funcionamiento ha sido genial.

    ResponderBorrar

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.