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 01-07-2004
acalderonr acalderonr is offline
Miembro
 
Registrado: may 2003
Ubicación: Mexico, DF
Posts: 33
Poder: 0
acalderonr Va por buen camino
Actualización automática del archivo EXE

Hola a todos.

Tengo una inquietud, y es que me gustaría hallar la manera de actualizar automáticamente el archivo EXE de mi programa en cada estación de trabajo, sin intervención del usuario.

Mi idea es la siguiente: colocar en un directorio compartido la última versión del archivo EXE y que cuando el usuario ejecute el programa en su estación de trabajo el programa mismo busque la fecha y hora de creación del archivo EXE compartido y si es más reciente, que se lo copie automáticamente. Se podrá algo así???

Sé que con GPO's de un servidor de Win2K o 2003 puedo implementar ese tipo de actualizaciones con instalaciones tipo MSI, pero me gustaría que fuera más sencillo el procedimiento, sobre todo pensando en aquellos que no tienen un servidor de esa naturaleza.

Ojalá alguien haya tenido que hacer algo parecido y pueda orientarme.

Muchas gracias
Responder Con Cita
  #2  
Antiguo 01-07-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por acalderonr
Mi idea es la siguiente: colocar en un directorio compartido la última versión del archivo EXE y que cuando el usuario ejecute el programa en su estación de trabajo el programa mismo busque la fecha y hora de creación del archivo EXE compartido y si es más reciente, que se lo copie automáticamente. Se podrá algo así???
Yo te diría que el usuario ejecute un programa disparador, no el exe final, que compare el EXE en el disco local contra el remoto, si el remoto es mas moderno que lo baje y ejecute, sino que directamente ejecute el EXE local.

¿No puedes ejecutar la aplicación en forma remota?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 01-07-2004
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Cita:
Empezado por delphi.com.ar
¿No puedes ejecutar la aplicación en forma remota?
a mi se me parece mas facil esta opcion, de hecho para evitar el problema de que hay que cerrar el sistema yo cree unas conexiones sockets y le envio al usuario la peticion de cierre si me dice espera yo monitoreo esa estacion hasta que se cierre el sistema, mientras haya un sistema abierto no actualizo
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #4  
Antiguo 08-07-2004
acalderonr acalderonr is offline
Miembro
 
Registrado: may 2003
Ubicación: Mexico, DF
Posts: 33
Poder: 0
acalderonr Va por buen camino
Gracias delphi.com.ar y eduarcol, perdón por contestar hasta ahora, pude revisar las dos sugerencias y me parecen bastante lógicas, sobre todo la tuya delphi.com.ar, ya que en mi caso, que no trabajo en las oficinas del cliente, a mi me gustaría sólo llegar con mi cliente, copiar la actualización (o hacerlo por la vpn desde mi casa) y depositarlo en el servidor, esperando que a la mañana siguiente cuando el usuario ejecute el programa este se actualice automáticamente.

La propuesta tuya, eduarcol, también me parece buena, aunque me tendría que quedar un buen rato con el cliente hasta que se actualicen todos.

De cualquier forma muchas gracias a los dos por contestar, probaré la primera opción, aunque me surge una duda, si ejecuto un primer programa disparador, que compara las versiones, cuando manda ejecutar el programa final cómo hago para desaparecer de la memoria el disparador y que no quede residente hasta que cierre el programa final? será que en el código del programa final puedo ejecutar una sentencia para desaparecer o liberar de la memoria el disparador??

Gracias nuevamente y saludos
Responder Con Cita
  #5  
Antiguo 08-07-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por acalderonr
aunque me surge una duda, si ejecuto un primer programa disparador, que compara las versiones, cuando manda ejecutar el programa final cómo hago para desaparecer de la memoria el disparador y que no quede residente hasta que cierre el programa final? será que en el código del programa final puedo ejecutar una sentencia para desaparecer o liberar de la memoria el disparador??
No tienes que hacer nada en especial. Recuerda que cuando el programa disparador mande a ejecutar el programa final, la ejecución del disparador continúa su curso normal.

Fíjate que de hecho el programa disparador normalmente será invisible al usuario- una aplicación sin ventanas - y lo puedes programar todo en el archivo dpr del proyecto. Algo así:

Código Delphi [-]
program Disparador;

begin
  if ExisteVersionNueva then
    BajaActualizacion;

  Ejecuta;
end.

El procedimiento Ejecuta mandaría ejecutar (valga la redundancia) al programa final (por ejemplo con WinExec). Pero el flujo del programa continúa y se llega al end final con lo cual termina la aplicación y se descarga de memoria.

// Saludos
Responder Con Cita
  #6  
Antiguo 08-07-2004
marcost marcost is offline
Registrado
 
Registrado: abr 2004
Posts: 9
Poder: 0
marcost Va por buen camino
Esto deberia servir. (He omitido todas las comprobaciones de error para hacerlo mas compacto y legible.)

Código:
 
procedure TForm1.FormShow(Sender: TObject);
var
cLocalExe, cReferenceExe : String;
nLocalExeTime, nReferenceExeTime : integer;
szParams : TStringList;
FileInfo: TSearchRec;
slParams : TStringList;
begin
	 slParams := TStringList.Create;
	 slParams.LoadFromFile ('.\appLoader.ini');
	 cLocalExe := slParams.Values['LocalExe'];
	 cReferenceExe := slParams.Values['ReferenceExe'];
	 if (findfirst (cLocalExe, faAnyFile, FileInfo) = 0)
		then
			nLocalExeTime := fileinfo.Time
		else
			nLocalExeTime := 0;
	 findClose (FileInfo);
	 findfirst (cReferenceExe, faAnyFile, FileInfo)
	 nReferenceExeTime := fileinfo.Time
	 findClose (FileInfo);
	 if (nReferenceExeTime > nLocalExeTime) then
		copyfile (PChar(cReferenceExe), PChar(cLocalExe), FALSE);
	 shellExecute ( 0, nil, PChar(cLocalExe), '','', SW_SHOW);
	 self.close;
end;
Y el archivo de configuración es algo como esto:

Apploader.ini
Código:
 LocalExe="c:\miProgama.exe"
ReferenceExe="\\servidor\recurso\miPrograma.exe"
Espero que te sirva, y no te olvides añadirle todas las comprobaciones de error.

NOTA. El programa que tengo tiene una ventana que va informando al usuario de los pasos q se ejecutan, (por eso el código aparece en el FormShow), pero la idea de hacerlo con un programa sin ventana, me parece muy interesante tambien.

Suerte

Última edición por marcost fecha: 08-07-2004 a las 21:35:06.
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


La franja horaria es GMT +2. Ahora son las 02:39:33.


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