Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Upgrade Aplicacion (https://www.clubdelphi.com/foros/showthread.php?t=53949)

mjjj 05-03-2008 14:18:31

Upgrade Aplicacion
 
Hola amigos, se me ocurrio una idea para mejorar mi aplicacion.

Utilizo Delphi 2006, Firebird 2.0 y los componentes de la paleta de Interbase para conectarme con las tablas.

Me gustaria tener un boton en mi aplicacion que se conecte con el servidor (el mismo donde tengo la base de datos), que automaticamente se actualize.

Se puede hacer esto?

Alguna idea de como hacerlo?

Gracias por su tiempo.... Saludos

mjjj 05-03-2008 14:26:24

Se me olvido mencionar que utilizo installShield 12 para generar el instalador de la aplicacion... nose si esto es relevante para mi connsulta, pero igual lo comento...

Saludos

duilioisola 05-03-2008 16:34:12

Qué quieres que se actualice?
- El ejecutable
- La base de datos
- Algún archivo (imágenes, help, etc)
- Todo esto

Quizás podrías poner en un FTP un archivo comprimido que tenga un nombre que incluya la versión o la fecha y hacer que tu ejecutable chequee que está ese archivo y si es mayor que la versión que está instalada.

(Nombre + _ + version)
MiAplicacion_v2.3.zip
MiAplicacion_20080305.rar
MiAplicacion_1234.exe

Si el usuario quiere actualizar
- descargas el/los archivos,
- los descomprimes,
- ejecutas el instalador y cierras la aplicación para poder reemplazar el ejecutable.

Ten en cuenta que si tienes una base de datos, quizás debas ejecutar algún script para actualizarla.

mjjj 05-03-2008 18:54:36

Hola

Quiero actualizar el ejecutable. Creo que la forma mas facil de hacerlo a comparando fechas...

Como es eso del FTP... como lo hago??

Ayuda porfa

Gracias

duilioisola 05-03-2008 19:27:54

Prueba la solapa Indo Clients.

Hay un componente para hacer clientes FTP. (TidFTP)
Nunca lo he utilizado pero parece sencillo.
Rellenas unas cuantas cosas del componente (direccion, puerto, nombre de usuario, password, etc) y luego supongo que debes llamar a get.

procedure Get(const ASourceFile: string; ADest: TStream); overload;

Si no te sirve esto, prueba a hacer una búsqueda en los foros, que seguro que encuentras mil ejemplos.

Saludos

ContraVeneno 05-03-2008 20:06:33

¿para que comparar fechas cuando puedes comparar la versión de tu programa?

Busca información sobre "FileVersionInfo"

En tu pograma puedes incluir, sin ningún problema, la información de versión hasta en 4 niveles

"Programa 1.3.4.123" por ejemplo... donde el primer nivel (1) es el número de versión mayor, el segundo nivel (3) es la versión menor, el tercer nivel (4) es el número de veces que has liberado tu programa y el cuarto y último nivel (123) es el número de veces que has hecho un "Build" a tu programa.

Esto lo controlas desde las opciones de tu proyecto (el último nivel se controla automáticamente).

Por aquí en los foros, hay una función que se llama "GetAppVersionInfo", si la buscas, seguro la encuentras. Y esa función te ayuda a saber en que versión esta tu programa consultandola directamente del archivo. De esta forma, consulta la versión del archivo que se encuentra en el FTP (o en la carpeta donde se supone colocaras la versión más actualizada) y la comparas con la versión del archivo donde se encuentra tu ejecutable.

Las JEDI tienen un componente llamado "TjvProgramVersionCheck" que supongo sirve para lo mismo, según sus propiedades, le indicas en que FTP/HTTP/Carpeta se encuentra el archivo actualizado y que acciones tomar en caso de encontrar una nueva versión. Digo supongo porque nunca lo he utilizado.

Saludos

mjjj 06-03-2008 21:36:56

hola... aer si me pueden ayudar...

estoy utilizando Tidftp para descargar el archivo... pero antes de descargarlo primero quiero saber si es que la version que esta en el servidor ftp es mas nueva que la que tengo en el PC cliente.

para obtener la version de la aplicacion en el PC cliente lo hago de esta manera

Código Delphi [-]
result:='';
  ruta := 'c:\mat\ordenes.exe';
  if not FileExists(ruta) then Exit;
  Size := GetFileVersionInfoSize(PChar(ruta), Size2);
  if (Size > 0) then begin
    GetMem(Pt, Size);
    try
      GetFileVersionInfo(PChar(ruta), 0, Size, Pt);
      VerQueryValue (Pt, '\', Pt2, Size2);
      with TVSFixedFileInfo (Pt2^) do begin
        Result :=
        IntToStr(HiWord(dwFileVersionMS))+'.'+
        IntToStr(LoWord(dwFileVersionMS))+'.'+
        IntToStr(HiWord(dwFileVersionLS))+'.'+
        IntToStr(LoWord(dwFileVersionLS));
      end;
    finally
      FreeMem(Pt);

Ahora bien necesito comprar esta version con la que esta en el servidor FTP... como hago para obtener la version del ejecutable que esta en el servidor y luego compararlas??

Espero me puedan ayudar,...

Saludos

mamcx 06-03-2008 22:27:54

Quizas te puedas ahorrar todo eso con un componente prefabricado, no?

mjjj 06-03-2008 22:30:14

ya lo creo, pero... cual podria ser?

He buscado pero no encuentro nada...

Saludos

ContraVeneno 06-03-2008 23:03:06

pues sería igual, pero la ruta sería al servidor ftp

mjjj 07-03-2008 03:34:21

entonces la ruta deberia quedar algo asi:

por ejemplo si la direccion IP del servidor FTP es 192.1.1.70


ruta := '192.1.1.70:c:\mat\ordenes.exe';

estoy en lo correcto

nightynvid 07-03-2008 17:01:17

Otra solucion es si tienes un servidor de base de datos, tener una tabla con las versiones que vas publicando, cada que generes una version das de alta un registro con la informacion de la nueva version, de esa manera haces solo una consulta a la tabla de versiones y seleccionas la mas reciente, la comparas con la version del programa cliente y si es mas reciente o mas antigua haces lo necesario.


La franja horaria es GMT +2. Ahora son las 12:37:31.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi