installer - Inno Setup: ¿Cómo manipular la barra de progreso en la sección Ejecutar?
progress-bar inno-setup (1)
Similar a esta pregunta:
¿Cómo establecer el valor de la barra de progreso en la sección [Ejecutar] del script de instalación de Inno Setup?
Cuando Inno Setup llega a la sección
[Run]
, la barra de progreso se muestra al 100% y se detiene en esta posición.
Tengo muchos archivos que instalo en esta sección
Run
, y deseo reiniciar la barra de progreso y controlarla, a medida que se instala cada programa.
El mensaje de estado es fácil de cambiar (
StatusMsg
), pero el progreso me falta algo.
¿Podrían ayudarme, por favor?
Ejemplo:
[Run]
Filename: "msiexec.exe"; Parameters: "/i ""msxml.msi"" /quiet"; /
StatusMsg: "MSXML..."; Flags: runascurrentuser
Filename: "msiexec.exe"; Parameters: "/i ""capicom_dc_sdk.msi"" /quiet"; /
StatusMsg: "CAPICOM..."; Flags: runascurrentuser
Como quiero controlar la barra de progreso durante su instalación, no sé qué hacer.
Pensé en usar el parámetro
BeforeInstall
, crear un código para establecer la barra de progreso en 0 haciendo algo como
WizardForm.ProgressGauge.Position = 0;
y en el parámetro
AfterInstall
, lo contrario,
WizardForm.ProgressGauge.Position = 100;
, pero ¿cómo cambiar durante la instalación?
Gracias.
Sería bastante difícil actualizar la barra de progreso, mientras se ejecuta otro proceso.
No veo el punto de intentarlo, ya que es poco probable que pueda decir el progreso del subinstalador, por lo que no sabrá a qué actualizar la barra de progreso.
Excepto en casos especiales, cuando el subinstalador proporciona una API para informar su progreso.
Para un ejemplo, ver:
- Inno Setup Obtenga progreso del instalador de .NET Framework 4.5 (o superior) para actualizar la posición de la barra de progreso o
- Inno Setup: haga que Inno Setup Installer informe el estado de progreso de la instalación al instalador maestro .
Para actualizar la barra de progreso según el número de subinstaladores finalizados, puede hacer lo siguiente:
[Run]
FileName: "process1"; BeforeInstall: UpdateProgress(0); AfterInstall: UpdateProgress(33)
FileName: "process2"; AfterInstall: UpdateProgress(66)
FileName: "process3"; AfterInstall: UpdateProgress(100)
[Code]
procedure UpdateProgress(Position: Integer);
begin
WizardForm.ProgressGauge.Position := Position * WizardForm.ProgressGauge.Max div 100;
end;
Para dividir parte del rango de progreso para instalar archivos y el resto para ejecutar los subinstaladores, vea
Inno Setup: evita que la extracción de archivos establezca la barra de progreso al 100%
Otra opción es usar un estilo de barra de progreso "marquesina" (= infinito).
Ver estilos de control de la barra de progreso .
[Run]
FileName: "process1"; BeforeInstall: SetMarqueeProgress(True)
FileName: "process2"
FileName: "process3"; AfterInstall: SetMarqueeProgress(False)
[Code]
procedure SetMarqueeProgress(Marquee: Boolean);
begin
if Marquee then
begin
WizardForm.ProgressGauge.Style := npbstMarquee;
end
else
begin
WizardForm.ProgressGauge.Style := npbstNormal;
end;
end;
Funciona incluso en Windows XP, a pesar de que ya no figura en la documentación oficial de Microsoft. Probado en Windows XP SP3.