Inno Setup编译报错:调用IsDotNetInstalled时参数数量无效【已解决】
Inno Setup编译报错:Invalid number of parameters 解决方法
报错详情
- 报错代码行:
if not IsDotNetInstalled() then - 错误提示:
Invalid number of parameters
问题原因及解决步骤
1. 直接报错原因:无参函数调用语法错误
Inno Setup的Pascal脚本规定,无参数的函数在调用时不能添加括号。你定义的IsDotNetInstalled是无参函数,但调用时写了IsDotNetInstalled(),违反语法规范导致编译报错。
修正方法:将调用处的括号去掉,改为:
if not IsDotNetInstalled then
2. 额外问题:.NET 9.0检测逻辑错误
你原代码中检测的是.NET Framework 4.x的注册表路径,但.NET 5及以后版本(包括9.0)属于.NET Core/.NET 5+系列,注册表位置完全不同,原代码无法正确检测到.NET 9.0运行时。需要修正注册表检测路径。
完整修正代码
[Code] var ResultCode: Integer; procedure InitializeSetup(); begin // 安装前检查.NET 9.0是否已安装 if not IsDotNetInstalled then begin MsgBox('缺少必需的.NET 9.0运行时,现在开始安装...', mbInformation, MB_OK); // 从临时目录运行.NET安装程序 if not Exec(ExpandConstant('{tmp}\dotnet-runtime-9.0.2-win-x64.exe'), '', '', SW_SHOWNORMAL, ewWait, ResultCode) then begin MsgBox('.NET运行时安装失败,错误代码:' + IntToStr(ResultCode), mbError, MB_OK); Abort; // 如果.NET 9.0未安装则终止安装 end; end; end; function IsDotNetInstalled(): Boolean; var version: String; begin Result := False; // 检测64位.NET 9.0运行时 if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedfx\Microsoft.NETCore.App', 'Version', version) then begin try // 提取主版本号进行比较(例如从9.0.2中提取9.0) if StrToFloat(Copy(version, 1, 3)) >= 9.0 then Result := True; except Result := False; end; end; // 如果64位未检测到,尝试检测32位版本 if not Result then begin if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\dotnet\Setup\InstalledVersions\x86\sharedfx\Microsoft.NETCore.App', 'Version', version) then begin try if StrToFloat(Copy(version, 1, 3)) >= 9.0 then Result := True; except Result := False; end; end; end; end;
内容的提问来源于stack exchange,提问作者Peety
相关产品推荐
相关产品推荐

