¡Ya casi está todo! Ya hemos comprobado si existe o no una descarga, hemos tenido cuidado para no entorpecer la ejecución principal, en caso de que no exista una conexión a la red, etc.
Seguiremos con el proceso de descarga (procedure DownloadUpdate), el cual transmitirá el feedback de la descarga al formulario con la ProgressBar creados con el constructor de la clase, que es extremadamente fácil, pues TDownloadURL nos permite realizar eventos relacionados con la descarga, más concreto, el evento OnDownloadProgress.
A continuación os enseñaré por encima TZipMaster, es gratuito y fácil de usar. Con él, podremos descomprimir nuestros recursos en un par de líneas de código.
DownloadUpdate! Mismo procedimiento que CheckUpdate, trabajando con la clase TDownloadURL, definida en la unit ExtActns.
procedure TAppUpdate.DownloadUpdate;
begin
with TDownloadURL.Create(nil) do
try
URL := 'nodo web' + App + '.zip');
FileName := App + '.zip';
OnDownloadProgress := DoProgress;
ExecuteTarget(nil);
finally
Free;
end;
end;
Dependerá de lo que hayamos decidido anteriormente, en mi caso opté por tener un nodo web estático, dependiendo únicamente del nombre de la aplicación. A su vez, la aplicación estará empaquetada en un zip. Como se puede observar, hemos creado el evento "OnDownloadProgress", el cual pondrá "al corriente" a la ProgressBar.
private
...
procedure DoProgress(Sender: TDownLoadURL;
Progress, ProgressMax: Cardinal;
StatusCode: TURLDownloadStatus;
StatusText: String; var Cancel: Boolean);
...
procedure TAppUpdate.DoProgress;
begin
with Bar do begin
Max := ProgressMax;
Position := Progress;
end;
end;
Genial, hasta ahora tenemos:
- Comprobar que existe conexión/actualización
- Descarga de la actualización, si procede.
Para terminar este capítulo, vamos a echarle un vistazo a ZipMaster (http://www.delphizip.org/). En la web encontrareis todo lo necesario, librerías, units, documentación, etc.
Como es de suponer, tenemos que proceder a crear la instancia. Actualizaremos la propiedad TZipMaster.ZipFileName y listo, ya podemos extraer con la función TZipMaster.Extract. Liberamos la instancia y borramos el archivo empaquetado. Nota: El contenido del paquete tiene que tener nombre diferente, es decir, si nuestra aplicación se llama Pepito.exe, el paquete no puede tener un Pepito.exe, pues al extraer crearíamos conflicto, pues Pepito.exe (el no empaquetado) está en ejecución. Para evitar problemas, podríamos tener dentro del paquete la nueva aplicación con otro nombre, como PepitoNEW.exe.
Esto nos lleva al último punto, ceder el control a otro programa, para este realizar los renombrados, y la limpieza de ficheros de la actualización. Como ya dije, lo más fácil aquí, es aplicar un poco de conocimiento en archivos por lotes, el cual, crearemos fácilmente desde nuestra aplicación.
...
WinExec('archivo por lotes', SW_HIDE);
Halt;
end;
Salu2.
No hay comentarios:
Publicar un comentario