You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据子安装程序执行结果修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:10:31