如何根据子安装程序执行结果修改Inno Setup结束复选框为重启选项
实现Inno Setup安装完成页替换「启动应用」为「重启计算机」复选框
1. 定义全局变量
在[Code]段开头添加全局变量,标记是否需要重启系统:
[Code] var RequireRestart: Boolean;
2. 修改.NET安装过程,标记重启需求
更新InstallNETFramework过程,通过.NET安装程序的返回码判断是否需要重启。当返回码为3010时,说明安装成功但需重启,此时设置RequireRestart为True:
procedure InstallNETFramework; var ResultCode: Integer; StatusText: string; begin StatusText := WizardForm.StatusLabel.Caption; WizardForm.StatusLabel.Caption := 'Installing .NET Framework 4.8...'; WizardForm.ProgressGauge.Style := npbstMarquee; try if not ShellExec('open', ExpandConstant('{app}\ndp48-x86-x64-allos-enu.exe'), '/norestart', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then begin MsgBox('.NET Framework 4.8 Installation did not succeed : ' + IntToStr(ResultCode) + '.', mbError, MB_OK); end else begin // .NET安装返回3010表示需重启系统 if ResultCode = 3010 then begin RequireRestart := True; end; end; finally WizardForm.StatusLabel.Caption := StatusText; WizardForm.ProgressGauge.Style := npbstNormal; end; end;
3. 替换完成页复选框与逻辑
在CurPageChanged事件中切换到完成页时,根据RequireRestart状态替换复选框文字;在NextButtonClick事件中处理重启逻辑:
procedure CurPageChanged(CurPageID: Integer); begin if CurPageID = wpFinished then begin if RequireRestart then begin // 替换复选框显示文本 WizardForm.RunCheckBox.Caption := '重启计算机'; // 调整完成页提示文字(可选) WizardForm.FinishedLabel.Caption := '安装已完成,需重启计算机以完成配置。'; end; end; end; function NextButtonClick(CurPageID: Integer): Boolean; begin Result := True; if CurPageID = wpFinished then begin if RequireRestart and WizardForm.RunCheckBox.Checked then begin // 调用系统重启,参数True会弹出确认框支持立即/稍后重启 RestartComputer(True); end; end; end;
4. 补充.NET安装状态检查(可选)
确保NETFrameworkIsNotInstalled函数能正确判断.NET 4.8是否已安装:
function NETFrameworkIsNotInstalled: Boolean; begin // 检查.NET Framework 4.8的Release值(528040为正式版最低值) Result := not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full') or (RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full', 'Release') < 528040); end;
关键说明
.NET Framework 4.8安装程序返回码3010是标准的“需重启”标识,需以此触发重启逻辑。RestartComputer(True)会弹出系统默认的重启确认框,用户可选择立即或稍后重启;若需强制重启可传入False(不推荐)。- 若无需保留原「启动应用」逻辑,可在
RequireRestart为True时直接禁用相关默认处理。
内容的提问来源于stack exchange,提问作者Hugo_vdms
相关产品推荐
相关产品推荐

