Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-06-2015
jofebas jofebas is offline
Miembro
 
Registrado: nov 2010
Posts: 50
Poder: 14
jofebas Va por buen camino
Question Actualizar exe Cliente-Servidor

Hola a todos.
Les comento.
Tengo una aplicación donde el ejecutable lo pongo en el servidor y las PCs tienen un acceso directo en su escritorio, al modificar el ejecutable todos pueden ver las actualizaciones, el problema es que también hay laptops donde tienen el ejecutable en su escritorio ya que tienen que viajar y se conectar por internet, el problema con ellos radica en que al hacer actualizaciones no la pueden ver hasta que les mando el nuevo o llegan y lo sustituyen.
¿Existe una manera de crear un ejecutable que llame a otro o que detecte si la versión es más nueva y se actualice solo?
Ya le estuve buscando y creo que estoy perdido.
Si pudieran ayudarme.
Gracias.
Responder Con Cita
  #2  
Antiguo 19-06-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jofebas.

Revisa si te puede servir lo comentado en este hilo: Cerrar aplicacion y a la vez executar otra..

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 19-06-2015
jofebas jofebas is offline
Miembro
 
Registrado: nov 2010
Posts: 50
Poder: 14
jofebas Va por buen camino
Gracias lo estoy revisando
Responder Con Cita
  #4  
Antiguo 19-06-2015
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 21
MAXIUM Va camino a la fama
Justo tengo un proyecto que funciona así y anda bastante bien.

Lo subo a la noche con código fuente y todo para que me ayuden a optimizarlo.
Responder Con Cita
  #5  
Antiguo 19-06-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
MAXIUM,

Cita:
Empezado por MAXIUM
...tengo un proyecto que funciona así...Lo subo a la noche con código fuente...


Nelson.
Responder Con Cita
  #6  
Antiguo 19-06-2015
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 21
MAXIUM Va camino a la fama
Post

Hola,

Bien, aquí esta el proyecto y espero ser claro en poder explicar su funcionamiento. Por otra parte, también me gustaría ayuda en depuración, ya que lo hice a la rápida y al ver que funcionaba, así quedo...

Bueno, el asunto es que tengo varias estaciones de trabajo con una aplicación que conecta a la base de datos de un servidor. Todo en forma local por LAN. El problema surge cuando hago actualizaciones del sistema y tengo que ir estación por estación haciendo esto. Así que cree esta aplicación que me resuelve el problema.

Lo otro que se me ocurrió, es que fuera "universal". Es decir, sin necesidad de estar compilando en cada nuevo proyecto. Solo coloco el ejecutable, le creo un acceso directo en el escritorio, le cambio el icono y modifico los parámetros del archivo INI que se adjunta y listo.

Bueno, ¿como funciona? Como explique, la aplicación que creen no se ejecuta directamente, sino que primero el actualizador que actúa como Launcher "universal". Entonces al arrancar el Launcher, este toma la versión del ejecutable a actualizar (importante activar la opción de incluir la versión del exe en las opciones del compilador) y la compara con el "nombre" del archivo en el servidor que contiene la actualización.

Ejemplo:
Si mi aplicación se llama ClubDelphi.exe y su versión es 1.0.0.0 Al ejecutar el launcher toma esta versión y la compara con el "nombre" del archivo que esta en el servidor y que se llama "update_to_1.0.0.102.zip" Si esta es mayor, la descarga, la descomprime y ejecuta un script contenido en el zip, el cual se encarga de reemplazar los archivos que especifiquemos o cualquier otra operación adicional. Este script, es del tipo VBS. Finalmente, ejecuta la aplicación y cierra el launcher.

Notas:
- El launcher y su archivo .ini, deben estar en el mismo directorio que contiene el ejecutable de sus aplicaciones.
- El ejecutable de sus aplicaciones, deben contener la versión.
- En el escritorio crean un acceso directo DEL launcher y le cambian el icono y nombre por el de sus aplicaciones o el que estimen conveniente.
- El servidor debe tener una carpeta compartida y con permisos, donde albergara la actualización.
- El archivo que contienen las actualizaciones, debe estar comprimido en zip con el nombre bajo el siguiente ejemplo update_to_1.2.0.357.zip
- El archivo que contienen las actualizaciones, debe contener un archivo scritp bajo el siguiente nombre script.vbs

Formato del archivo INI que se adjunta
Cita:
[RUTA]
; Ruta que contiene la actualización.
Actualizacion=\\SistemaUno\Actualizaciones

[VERSION]
; Aplicación con la que se desea comparar con la actualización disponible.
Ejecutable=ClubDelphi.exe
Formato del archivo script que se adjunta. Puede agregar más opciones a este si lo desean y bajo sus necesidades
Cita:
Set objfso = createobject("scripting.filesystemobject")
Objfso.copyfile ".\Temp\*.exe", ".\", true
Objfso.deletefolder ".\Temp"
Estructura principal
Código Delphi [-]
Begin
     ShowWindow(GetConsoleWindow, SW_HIDE);

     Directorio := ExtractFilePath(Application.ExeName);

     LauncherINI:= TIniFile.Create(Directorio + 'Launcher.ini');
     Try
        RutaActualizacion:= LauncherINI.ReadString('RUTA'   , 'Actualizacion', '');
        Aplicacion       := LauncherINI.ReadString('VERSION', 'Ejecutable'   , '');
     Finally
        LauncherINI.Free;
     End;

  // Verifica si hay archivos de actualizaciones dispobibles.
     ListaDeArchivos:= ArchivosCarpeta(RutaActualizacion, '*.zip', True, False);
     If ListaDeArchivos.Count > 0 Then
     Begin
       // Lee los nombres de las actualizaciones disponibles y escoje la última (más reciente).
          Actualizacion:= ListaDeArchivos.Strings[ListaDeArchivos.Count -1];

       // Extrae la numeración de la actualización disponible.
          Version:= ChangeFileExt(ExtractFileName(Actualizacion), '');
          Version:= Copy(Version, 11,  Length(Version));

       // Almacena los valores de ambas versiones en vectores.
          VersionActual    := GetExeVersion(Directorio + Aplicacion);
          VersionDisponible:= GetZipVersion(Version);

       // Comprueba si la actualización es reciente.
          Actualizar:= False;
          Indice    := 1;
          Repeat
                If (VersionDisponible[Indice] > VersionActual[Indice]) Then
                Begin
                    Actualizar:= True;
                    Indice    := 5;
                End
                Else If (VersionDisponible[Indice] = VersionActual[Indice]) Then
                    Inc(Indice)
                Else
                    Indice:= 5;
          Until Indice = 5;

          If Actualizar Then
          Begin
               If Not DirectoryExists(Directorio + 'Temp') Then CreateDir(Directorio + 'Temp') ;

               ShellUnzip(Actualizacion, Directorio + 'Temp');

               WinExecAndWait32(DirectorioSistema + '\wscript.exe ' + GetShortName(Directorio + 'Temp\script.vbs'), SW_SHOWNORMAL)
          End;
     End;
     
     FreeAndNil(ListaDeArchivos);

     WinExec(PChar(Directorio + Aplicacion),SW_SHOWNORMAL);
End.

Cualquier consulta, quedo atento
Archivos Adjuntos
Tipo de Archivo: zip Update.zip (36,0 KB, 32 visitas)

Última edición por MAXIUM fecha: 19-06-2015 a las 21:59:57.
Responder Con Cita
  #7  
Antiguo 19-06-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Responder Con Cita
  #8  
Antiguo 20-06-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Muchas gracias por el aporte MAXIUM

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Actualizar en el cliente con FIBPlus, Como? El_Raso Conexión con bases de datos 4 06-02-2013 23:15:10
cliente servidor kapcomx Conexión con bases de datos 2 28-08-2007 22:48:25
actualizar aplicacion cliente en varios puesto VRO Providers 0 25-10-2005 18:00:49
Problema:Cliente/Servidor.Actualizar clientes automaticamente. aoiTo Conexión con bases de datos 5 04-08-2004 06:02:27
Actualizar sólo 1 registro en cliente/servidor Rufus Conexión con bases de datos 7 21-06-2004 12:02:14


La franja horaria es GMT +2. Ahora son las 17:53:22.


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
Copyright 1996-2007 Club Delphi