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

Inno Setup自定义Get64Or32函数报Invalid prototype错误求助

问题原因

Inno Setup 中使用 {code:函数名} 语法调用的自定义函数,必须遵循固定的原型要求:必须接收一个String类型的传入参数,即使你的业务逻辑中不需要用到这个参数也必须声明,否则就会抛出「Invalid prototype」的原型不匹配错误。

解决方法

方案1:修改自定义函数符合调用要求

把你[Code]区段的函数调整为如下写法即可:

function Get64Or32(Param: String): String;
begin
  if IsWin64 then
  begin
    Result := 'Program Files (x86)';
  end
  else
  begin
    Result := 'Program Files';
  end;
end;

建议你[Registry]区段调用时函数名大小写和声明保持一致,避免不必要的问题:

Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType:string; ValueName:"JRE_HOME"; ValueData:"C:\{code:Get64Or32}\Java\jre_1.8.0_151"; Flags: preservestringtype uninsdeletevalue uninsdeletekeyifempty; Permissions: users-modify;

方案2:直接用内置常量简化(更推荐)

你要实现的逻辑完全可以用Inno Setup内置的{pf32}常量代替,不需要额外写自定义函数:
{pf32} 常量在32位系统会自动解析为Program Files,在64位系统会自动解析为Program Files (x86),刚好匹配你的需求。
直接把[Registry]区段的ValueData改成如下即可:

ValueData:"C:\{pf32}\Java\jre_1.8.0_151"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 14:36:03