Hi,请  登录  或  注册

内部错误:试图在初始化之前展开 app 常量

有些人在给老项目做多模块安装的时候,尤其是主程序+子模块(比如子游戏),经常会遇到这么个安装弹窗:

内部错误:试图在初始化之前展开“app”常量

看着吓人,其实就是 注册表里没找着路径,所以 {app} 常量没法解析出来。

内部错误:试图在初始化之前展开 app 常量

常见原因

这类问题大多数发生在 子游戏安装包

  • 主程序在装的时候,会把路径写到注册表里(一般是 HKCU\Software\XXX)。

  • 子程序要读这个注册表,拿到 {app} 作为路径。

  • 如果找不到,就直接报错,提示无法展开。

怎么排查?

第一步:看子程序的安装路径是否从注册表拿对了

标准写法:

[Setup]
DefaultDirName={reg:HKCU\Software\WHQPGame\GamePlaza,InstallPath}

这句话的意思是:

  • 到注册表 HKCU\Software\WHQPGame\GamePlaza 下找 InstallPath

  • 作为安装根目录。

第二步:看主程序是否写了正确的注册表键

标准写法示例:

[Registry]
Root: HKCU; Subkey: "Software\WHQPGame\GamePlaza"; Flags: uninsdeletekey
Root: HKCU; Subkey: "Software\WHQPGame\GamePlaza"; ValueName: "InstallPath"; ValueType: String; ValueData: "{app}"; Flags: createvalueifdoesntexist uninsdeletevalue deletevalue

这里重点:

  • ValueName 必须叫 InstallPath

  • ValueData 要用 {app},表示当前安装路径。

  • 安装时才会把这个路径写到注册表。

第三步:显示安装路径,确认路径是否正确

如果还没思路,可以在 ISS 脚本里加一行:

[Setup]
DisableDirPage=no

意思是把安装路径选择页显示出来,这样装的时候就能看到实际拿到的路径是什么,方便排错。

实操示例

假设你主程序脚本里是:

[Setup]
AppName=WHQPGame
DefaultDirName={pf}\WHQPGame\GamePlaza

那子程序脚本就要写:

[Setup]
DefaultDirName={reg:HKCU\Software\WHQPGame\GamePlaza,InstallPath}

保证两个路径一致,否则子程序读不到注册表值就挂了。

碰到这种 “初始化之前展开 app 常量” 的错误,99% 是注册表路径没写对,或者子程序脚本没和主程序对齐。

一句话总结:

  • 主程序先写注册表。

  • 子程序从注册表读路径。

  • 路径一致,问题消失。

转载请注明出处,保留作者署名与出处链接,感谢支持开源精神与知识传播!

文章名称:内部错误:试图在初始化之前展开 app 常量
除非特别注明,本站所有文章均为原创,转载请注明出处:264玫瑰资源库
部分教程资源来源于互联网,请谨慎辨别广告内容,避免上当受骗!

评论 抢沙发

登录

找回密码

注册