INNO SETUP使用复选框选择目录组安装及关联下载的问题求助
Inno Setup 自定义复选框分组安装脚本修复方案
核心问题汇总
- 语法错误:
InstallFR函数末尾多了多余的else关键字,直接导致编译报错 - 逻辑时序错误:下载资源的
idpAddFile代码写在了窗体初始化阶段,此时用户还没有完成复选框选择,读取的都是初始默认值,不会跟随用户选择动态变化 - 界面显示错误:除前两个复选框外,其余8个复选框的
Top属性值完全相同,会全部重叠在同一个位置,用户无法看到和选择 - 调用缺失:
InitializeWizard过程中没有调用RedesignWizardForm,自定义复选框不会显示在欢迎页 - 解压逻辑缺失判断:
[Run]段的解压命令没有加选择校验,未勾选的分组也会执行解压操作,找不到对应压缩包就会报错
具体修复步骤
1. 修正语法错误
将InstallFR、InstallMO函数简化,删除多余语法,其余8个分组也按照这个格式补全对应的校验函数即可:
function InstallFR: Boolean; begin Result := chkbInstallFR.Checked; end; function InstallMO: Boolean; begin Result := chkbInstallMO.Checked; end;
2. 修正复选框位置
依次修改每个复选框的Top值,每个选项向下偏移24像素,避免重叠:
{ chkbInstallBELUX } Top := ScaleY(64); { chkbInstallSUI } Top := ScaleY(88); { chkbInstallITA } Top := ScaleY(112); { chkbInstallALL } Top := ScaleY(136); { chkbInstallEURONU } Top := ScaleY(160); { chkbInstallILE } Top := ScaleY(184); { chkbInstallAFR } Top := ScaleY(208); { chkbInstallBUR } Top := ScaleY(232);
3. 调整下载逻辑时序
删除RedesignWizardForm里ReservationBegin和ReservationEnd之间的idpAddFile代码,新增idp.OnDownloadBegin事件绑定,在下载开始前读取用户最终选择:
procedure InitializeWizard; begin RedesignWizardForm; // 新增调用,显示自定义复选框 idpDownloadAfter(wpReady); idp.OnDownloadBegin := @OnDownloadBegin; // 绑定下载前事件 end; procedure OnDownloadBegin(Sender: TObject); begin // 在这里根据用户最终勾选的选项添加下载任务 if chkbInstallFR.Checked then begin idpAddFile('http://www.philatelix.fr/Divers/PHI/UNY.zip', ExpandConstant('{tmp}\UNY.zip')); end; if chkbInstallMO.Checked then begin idpAddFile('http://www.philatelix.fr/Divers/PHI/AN.zip', ExpandConstant('{tmp}\AN.zip')); idpAddFile('http://www.philatelix.fr/Divers/PHI/ANE.zip', ExpandConstant('{tmp}\ANE.zip')); end; // 其余8个分组的下载任务也在这里补全 end;
4. 给[Run]段解压命令加校验
修改[Run]段代码,每个解压命令对应加Check条件,其余分组的解压命令也按照这个规则补全即可:
[Run] Filename: {app}\7za.exe; Parameters: "x ""{tmp}\UNY.zip"" -o""{app}\Pic\UNY"" * -aoa"; Flags: runascurrentuser; Check: InstallFR; Filename: {app}\7za.exe; Parameters: "x ""{tmp}\AN.zip"" -o""{app}\Pic\AN"" * -aoa"; Flags: runascurrentuser; Check: InstallMO; Filename: {app}\7za.exe; Parameters: "x ""{tmp}\ANE.zip"" -o""{app}\Pic\ANE"" * -aoa"; Flags: runascurrentuser; Check: InstallMO;
内容的提问来源于stack exchange,提问作者Alain MENARD
相关产品推荐
相关产品推荐

