我制作了自定义页面来根据用户的选择来管理特定的 redist 工具安装。
如果用户想要或不安装这些工具,这些工具会链接到用户选中的复选框。
然后出现一个页面,向用户显示每个工具的安装进度。
我在这里遇到的问题是进度页面仅在第一次时显示ExtractTemporaryFile
工具的设置已完成,显示最后一页就好像它已冻结一样。
我必须让进度页面在之前显示的唯一方法ExtractTemporaryFile
发生的情况是放一个MsgBox
在任何安装功能之前。
但即使在这种情况下,当ExtractTemporaryFile
启动后,进度条动画被冻结,直到ExtractTemporaryFile
已经完成了...
这是执行此操作的代码部分:
procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=PageInstallationPersonnalisee.ID then
begin
ProgressBarLabelPageInstPerso.Caption := 'Initialisation...';
if InstallTool1 = True then
begin
ProgressBarLabelPageInstPerso.Caption := 'Installing InstallTool1...';
F_InstallTool1();
end;
if InstallTool2 = True then
begin
ProgressBarLabelPageInstPerso.Caption := 'Installing InstallTool2...';
F_InstallTool2();
end;
if InstallTool3 = True then
begin
ProgressBarLabelPageInstPerso.Caption := 'Installing InstallTool3...';
F_InstallTool3();
end;
ProgressBarPageInstPerso.Style := npbstMarquee;
//ProgressBarPageInstPerso.Style := npbstNormal;
ProgressBarPageInstPerso.Position := 100;
CancelWithoutPrompt:=True;
WizardForm.Close;
end;
end;
注意ExtractTemporaryFile()
是在每个F_InstallTooln()
功能。
设置和文件部分的其他部分可以帮助:
[Setup]
SolidCompression=no
[Files]
;Temporary redists
Source: "{#MyRessourcesPath}InstallTool1_Setup.exe"; DestDir: "{tmp}"; \
Flags: deleteafterinstall noencryption dontcopy
Source: "{#MyRessourcesPath}InstallTool2_Setup.exe"; DestDir: "{tmp}"; \
Flags: deleteafterinstall noencryption dontcopy
Source: "{#MyRessourcesPath}InstallTool3_Setup.exe"; DestDir: "{tmp}"; \
Flags: deleteafterinstall noencryption dontcopy
在这里,页面PageInstallationPersonnalisee
直到第一次才显示ExtractTemporaryFile
已经完成了...
我知道ExtractTemporaryFile
可能会导致一些延迟安装过程,但是为什么它会导致向导冻结呢?
所以我的问题是:在我的场景中,有没有办法强制向导刷新,以便他在任何操作之前出现ExtractTemporaryFile
程序启动了吗?