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

Inno Setup打包脚本中如何检测系统是否已安装.NET 5.0

Inno Setup 打包 .NET 5.0 程序时实现运行时按需安装

实现原理

.NET 5 属于 .NET Core 迭代产品线,和传统 .NET Framework 的注册表检测路径完全不同。x64 版本的 .NET 5.0 桌面运行时安装后,会在注册表 HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedfx\Microsoft.WindowsDesktop.App 路径下写入Version值记录已安装版本号,只要该值大于等于你依赖的最低版本,即可判定运行时已安装,无需重复执行安装包。

修改后的完整脚本

你只需要在原有脚本基础上增加自定义检测函数,给运行时的文件释放、安装执行步骤加上检测触发条件即可,不需要依赖第三方插件:

#define AppName "LowPoly Games Launcher"
#define AppEXEName "LPG Launcher.exe"
// 抽离运行时相关配置,后续维护更方便
#define DotNetMinVersion "5.0.17"
#define DotNetInstallerName "windowsdesktop-runtime-5.0.17-win-x64.exe"

[Setup]
AppName={#AppName}
// 补充64位安装配置,避免注册表重定向导致检测失效
ArchitecturesInstallIn64BitMode=x64

[Files]
Source: "..\bin\Release\net5.0-windows\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs;
// 仅未检测到对应运行时时才释放安装包,减少无用文件写入
Source: "Resources\{#DotNetInstallerName}"; DestDir: "{app}"; Flags: ignoreversion deleteafterinstall; Check: not IsDotNet5DesktopInstalled

[Run]
Filename: "{app}\{#AppEXEName}"; Description: "{cm:LaunchProgram, {#StringChange(AppName, '&', '&&')}}"; Flags: nowait postinstall
// 仅未检测到运行时时执行安装,修正原提示里的".NET Framework"错误表述,优化安装参数避免强制重启
Filename: "{app}\{#DotNetInstallerName}"; Parameters: "/install /q /norestart"; Flags: waituntilterminated; StatusMsg: "正在安装 Microsoft .NET 5.0 桌面运行时,请稍候..."; Check: not IsDotNet5DesktopInstalled

[Code]
function IsDotNet5DesktopInstalled: Boolean;
var
  InstalledVer: string;
begin
  Result := False;
  // 读取64位注册表分支的.NET版本记录
  if RegQueryStringValue(HKLM, 'SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedfx\Microsoft.WindowsDesktop.App', 'Version', InstalledVer) then
  begin
    // 已安装版本大于等于要求的最低版本即判定为符合要求
    Result := CompareStr(InstalledVer, '{#DotNetMinVersion}') >= 0;
  end;
end;

补充说明

  • 如果你后续需要打包32位版本的程序,只需要把注册表路径里的x64替换为x86,同时替换对应架构的.NET运行时安装包即可。
  • 原脚本里的安装参数/q/passive存在冲突:/q为完全静默无界面,/passive为仅显示进度条无需用户交互,修改为/install /q /norestart可以实现完全静默安装,同时避免运行时安装完成后强制重启用户设备。
  • 版本对比逻辑兼容更高的5.x补丁版本:如果用户系统已经安装了5.0.17以上的.NET 5桌面运行时,会自动跳过安装步骤,不会出现强制降级安装的问题。
  • 该逻辑完全基于Inno Setup原生Pascal脚本实现,兼容Inno Setup 6.0及以上版本,不需要引入额外依赖。

内容的提问来源于stack exchange,提问作者Istalri Skolir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:24:35