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 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
  #2  
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 09:49:38.


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