Inno setup 在欢迎页面上显示长时间运行操作的进度

Inno setup 在欢迎页面上显示长时间运行操作的进度,inno-setup,Inno Setup,我想在安装过程中检查我的应用程序的更新,同时以Inno Setup的形式显示该过程 所以基本上是这样的: WizardForm.WelcomeLabel2.Caption:=“正在检查更新…”; 下载文件(VersionURL,最新版本) WizardForm.WelcomeLabel2.Caption:=“新版本可用”; 下面是一个工作代码,除非调用CurPageChanged时表单尚未准备就绪。在检查新版本之前,它不会正确显示。请看屏幕截图。它在使用调试器单步执行代码时工作正常 我错过了什

我想在安装过程中检查我的应用程序的更新,同时以Inno Setup的形式显示该过程

所以基本上是这样的:

WizardForm.WelcomeLabel2.Caption:=“正在检查更新…”;
下载文件(VersionURL,最新版本)
WizardForm.WelcomeLabel2.Caption:=“新版本可用”;
下面是一个工作代码,除非调用
CurPageChanged
时表单尚未准备就绪。在检查新版本之前,它不会正确显示。请看屏幕截图。它在使用调试器单步执行代码时工作正常

我错过了什么?有解决办法吗?
主要目标是避免在没有任何反馈的情况下等待版本检查过程,因为这感觉像是不负责任

两张照片

  • 我得到的是:

  • 想要什么

#如果定义为UNICODE
; 有符号64位整数,但仅使用正数,0。。9223372036854775807
; 版本字符串的示例:
; 0..255 . 0..255 . 0..255 . 0..255 . 0..255 . 0..255 . 0..255 . 0..127
; 0..65535 . 0..65535 . 0..65535 . 0..32767
#定义Int64_或长单词“Int64”
#否则
; 长词,0。。4294967295
; 0..255 . 0..255 . 0..255 . 0..255
; 0..65535 . 0..65535
#定义Int64_或_LongWord“LongWord”
#恩迪夫
[设置]
AppName=检查版本
AppVersion=1.2.3
DefaultDirName={pf}\My程序
[守则]
常数
设置URL=http://hu.hu/huhu.exe';
VersionURL=http://hu.hu/version.txt';
子集合的大小=4;
sizeSubset=256;
函数VerStrToNum(const strvision:String):{Int64_或_LongWord};
var strVersionRemaining:字符串;
tmpIntSubset:整数;
i:字节;
开始
//在末尾添加句点,以便任何有效数字都应以句点结尾
//空strVersionRemaining表示读取所有数字,其余为零
//v1.2.3=v1.2.3.0.0
strVersionRemaining:=添加期间(strVersion);
对于i:=1到sizeNumOfSubsets do begin
如果剩余的是“”,则开始
tmpIntSubset:=strotintdef(复制(strVersionRemaining,1,位置('.',strVersionRemaining)-1),-1);
strVersionRemaining:=复制(strVersionRemaining,位置('.',strVersionRemaining)+1,长度(strVersionRemaining));
结束
否则tmpIntSubset:=0;
如果tmpIntSubset-1,则开始
结果:=结果*大小子集+tmpIntSubset;
结束
否则开始
//如果版本字符串格式无效,只需返回0,
//这个错误只会让用户感到困惑。RaiseException(“版本字符串的格式无效”);
结果:=0;
出口
结束;
结束;
结束;
函数下载文件(consturl:string;var响应:string):布尔;
变量
WinHttpRequest:变量;
开始
结果:=真;
尝试
WinHttpRequest:=CreateOleObject('WinHttp.WinHttpRequest.5.1');
WinHttpRequest.Open('GET',URL,False);
WinHttpRequest.Send;
响应:=WinHttpRequest.ResponseText;
除了
结果:=假;
响应:=GetExceptionMessage;
结束;
结束;
//---按PREV按钮返回欢迎页面时显示正确文本
var oldwellcomescaption:字符串;
函数NextButtonClick(CurPageID:Integer):布尔值;
开始
如果CurPageID=wpWelcome,则开始
WizardForm.WelcomeLabel2.Caption:=旧WelcomeCaption;
结束;
结果:=真
结束;
var面板下载按钮:TPanel;
过程CurPageChanged(CurPageID:Integer);
var最新版本:字符串;
开始
案例CurPageID
欢迎:开始
//欢迎页面此时仍处于隐藏状态
WizardForm.Visible:=True;
//这就是我所缺少的:
巫师:重新上漆;
oldWelcomeCaption:=WizardForm.WelcomeLabel2.Caption;
WizardForm.WelcomeLabel2.Caption:=oldWelcomeCaption+#13+#10+#13+#10+#13+#10+#13+#10+#13+#13+#10+“检查更新…”;
如果下载文件(VersionURL,LatestVersion),则开始
如果VerStrToNum(最新版本)>VerStrToNum(“{#SetupSetting('AppVersion')}”),则开始
WizardForm.WelcomeLabel2.Caption:=旧WelcomeCaption+#13+#10+#13+#10+#13+#10+#13+#10+#13+#10+#新版本可用;
//PanelDownloadButton.Visible:=True;
//xxx运行下载的安装程序,退出此安装程序
结束
else WizardForm.WelcomeLabel2.Caption:=旧WelcomeCaption+#13+#10+#13+#10+#13+#10+#13+#10+#13+#10+“没有新版本。”;
结束
else WizardForm.WelcomeLabel2.Caption:=WizardForm.WelcomeLabel2.Caption+#13+#10+副本(最新版本,位置(“:”,最新版本)+2,长度(最新版本));
结束;
结束;
结束;
编辑:上面的代码现在已修复,以防任何人想要使用版本检查。

稍后,我将使用按钮添加指向最终代码的链接并下载功能。

调用
向导表单。重新绘制
以强制表单完全绘制:

WizardForm.Visible:=True;
巫师:重新上漆;

强制控件在屏幕上重新绘制其图像

调用
repait
强制控件立即重新绘制其图像


太好了,就是这样。我将修改原始问题中的代码以包含它,以防有人想要使用它。戴克。