Inno Setup:如何操作运行部分的进度条? [英] Inno Setup: How to manipulate progress bar on Run section?

查看:77
本文介绍了Inno Setup:如何操作运行部分的进度条?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

类似于这个问题:

即使在 Windows XP 上也能工作,尽管不再在 Microsoft 官方文档中列出.在 Windows XP SP3 上测试.

Similar to this question:
How to set the progress bar value in the [Run] section of the Inno Setup install script?

When the Inno Setup gets to the [Run] section, the progress bar shows at 100% and stops in this position.

I have many files that I install in this Run section, which I wish to restart the progress bar and control it, as it goes installing each program.

The status message is easy to change (StatusMsg), but the progress I'm missing something. Could you guys help me out, please?

Example:

[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

Since I want to control the progress bar during it's installation, I don't know what to do. I thought in maybe using BeforeInstall parameter, creating a code to set the progress bar to 0 by doing something like WizardForm.ProgressGauge.Position = 0; and in the AfterInstall parameter, the opposite, WizardForm.ProgressGauge.Position = 100;, but how to change during the installation?

Thanks.

解决方案

It would be rather difficult to update the progress bar, while another process is running.

I do not see a point of endeavoring it, as you are unlikely able to tell the progress of the sub-installer, so you won't know what to update the progress bar to.

Except for special cases, when the sub-installer provides an API to report its progress.
For an example, see:


To update the progress bar according to number of sub-installers finished, you can do:

[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;

To divide part of the progress range for installing files and the rest to running the sub-installers, see
Inno Setup - Prevent extraction of files from setting progress bar to 100%


Another option is to use a "marquee" (= infinite) progress bar style.

See Progress bar control styles.

[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;

Works even on Windows XP, despite not being listed in the official Microsoft documentation anymore. Tested on Windows XP SP3.

这篇关于Inno Setup:如何操作运行部分的进度条?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆