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
相关产品推荐
相关产品推荐

