![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
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 |
|
#2
|
||||
|
||||
|
Cita:
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í:
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 |
|
#3
|
|||
|
|||
|
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;
Apploader.ini Código:
LocalExe="c:\miProgama.exe" ReferenceExe="\\servidor\recurso\miPrograma.exe" 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. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|