Mostrando mensaje personalizado de estado mientras se extrae el archivo en Inno Setup.
Tengo un archivo de instalación para mi aplicación que contiene el archivo .exe y un archivo .zip también.
Lo que quiero es:
Recientemente agregué un código en la sección [Code] que extrae archivos de un archivo zip. Pero en realidad, esto sucede después de que la instalación se ha completado y la barra de progreso llega al 100%. Lo que quiero es hacer que el proceso de descompresión del código funcione con la barra de progreso y mostrar al usuario lo que se está extrayendo en ese momento.
Por ejemplo, supongamos que extraer archivos tomará el 50% de la barra de progreso y el resto lo tomará la sección de código mientras está descomprimiendo, con un estado sobre lo que se está extrayendo en ese momento.
Aquí está el código:
[Code]
procedure InitializeWizard;
begin
ForceDirectories(ExpandConstant('{localappdata}\folder-A\app\folder-B'));
end;
const
SHCONTCH_NOPROGRESSBOX = 4;
SHCONTCH_RESPONDYESTOALL = 16;
procedure unzip(ZipFile, TargetFldr: variant);
var
shellobj: variant;
SrcFldr, DestFldr: variant;
shellfldritems: variant;
begin
if FileExists(ZipFile) then begin
if not DirExists(TargetFldr) then
if not ForceDirectories(TargetFldr) then begin
MsgBox('¡¡No se puede crear la carpeta '+TargetFldr+'!!', mbError, MB_OK);
Exit;
end;
shellobj := CreateOleObject('Shell.Application');
SrcFldr := shellobj.NameSpace(ZipFile);
DestFldr := shellobj.NameSpace(TargetFldr);
shellfldritems := SrcFldr.Items;
DestFldr.CopyHere(
shellfldritems, SHCONTCH_NOPROGRESSBOX or SHCONTCH_RESPONDYESTOALL);
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
unzip(ExpandConstant('{app}\example.zip'),ExpandConstant('{app}\'));
end;
end;
davy.ai
Para que el proceso de descompresión funcione con la barra de progreso y muestre al usuario lo que se está extrayendo, puede utilizar las funciones de la barra de progreso integradas de Inno Setup.
En primer lugar, necesita calcular el tamaño total de los archivos que se están extrayendo del archivo zip para poder determinar el porcentaje de progreso. Puede hacerlo usando la función
GetBasicFileInfo
de la unidadClasses
.Luego, durante el proceso de descompresión, puede usar
WizardForm.ProgressGauge
para actualizar la barra de progreso yWizardForm.StatusLabel
para mostrar al usuario lo que se está extrayendo.Finalmente, necesita llamar a la función
descomprimir
durante el proceso de instalación utilizando el eventoCurPageChanged
.Con estas actualizaciones, la barra de progreso mostrará el estado actual del proceso de descompresión, y la etiqueta de estado mostrará el nombre del archivo que se está extrayendo.