Installation Inno设置:如何在运行部分操作进度条?

Installation Inno设置:如何在运行部分操作进度条?,installation,progress-bar,inno-setup,pascalscript,Installation,Progress Bar,Inno Setup,Pascalscript,与此问题类似: 当Inno安装程序到达[Run]部分时,进度条以100%显示并在此位置停止 我在Run部分安装了许多文件,我希望在安装每个程序时重新启动进度条并对其进行控制 状态消息很容易更改(StatusMsg),但是我缺少了一些进展。你们能帮帮我吗 例如: [Run] Filename: "msiexec.exe"; Parameters: "/i ""msxml.msi"" /quiet"; \ StatusMsg: "MSXML..."; Flags: runascurrent

与此问题类似:

当Inno安装程序到达
[Run]
部分时,进度条以100%显示并在此位置停止

我在
Run
部分安装了许多文件,我希望在安装每个程序时重新启动进度条并对其进行控制

状态消息很容易更改(
StatusMsg
),但是我缺少了一些进展。你们能帮帮我吗

例如:

[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
因为我想在安装过程中控制进度条,所以我不知道该怎么做。我想在安装前使用
参数,创建一个代码,通过执行类似
WizardForm.ProgressGauge.Position=0的操作将进度条设置为0
和在
AfterInstall
参数中,相反的
向导form.ProgressGauge.Position=100,但在安装过程中如何更改


谢谢。

当另一个进程正在运行时,更新进度条将相当困难

我看不出有什么必要这么做,因为您不太可能知道子安装程序的进度,所以您不知道更新进度条的目的是什么

除特殊情况外,当子安装程序提供API来报告其进度时。
有关示例,请参见:


要根据完成的子安装程序数更新进度栏,可以执行以下操作:

[运行]
文件名:“process1”;安装前:UpdateProgress(0)\
后安装:UpdateProgress(33)
文件名:“process2”;后安装:UpdateProgress(66)
文件名:“process3”;后安装:UpdateProgress(100)
[守则]
过程更新进程(位置:整数);
开始
WizardForm.ProgressGauge.Position:=
位置*WizardForm.ProgressGauge.Max div 100;
结束;
要将安装文件的进度范围的一部分划分为运行子安装程序,请参见


另一个选项是使用“字幕”(=无限)进度条样式

[运行]
文件名:“process1”;安装前:SetMarqueeProgress(真)
文件名:“process2”
文件名:“process3”;后安装:SetMarqueeProgress(错误)
[守则]
过程SetMarqueeProgress(选框:布尔值);
开始
如果选框那么
开始
WizardForm.ProgressGauge.Style:=npbstMarquee;
结束
其他的
开始
WizardForm.ProgressGauge.Style:=npbstNormal;
结束;
结束;

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