Inno Setup [INI]段含下划线的键值无法更新问题求助
Inno Setup 6.2.1 [INI]段含下划线Key无法更新的解决方案
问题重现
在[INI]段配置如下条目时:
Filename: "{code:GetIniPath}\REHEV.INI"; Section: "WIDTH"; Key: "MIS_RISHUI"; \ String: "10"; Flags: createkeyifdoesntexist
安装程序日志会输出:
Skipping updating the .INI file, only updating uninstall log.
但将Key改为无下划线的MISRISHUI时,INI文件能正常更新。
解决方法
由于Inno Setup的[INI]段自动处理逻辑对含下划线的键名存在匹配异常,建议改用[Code]段手动写入INI键值,完全规避该问题:
- 移除[INI]段中对应的条目
- 在脚本的
[Code]段添加以下代码:
procedure CurStepChanged(CurStep: TSetupStep); var IniFilePath: String; begin // 选择在安装完成后执行,与[INI]段执行时机一致 if CurStep = ssPostInstall then begin // 解析INI文件路径 IniFilePath := ExpandConstant('{code:GetIniPath}\REHEV.INI'); // 写入单个含下划线的键值 WriteIniString('WIDTH', 'MIS_RISHUI', '10', IniFilePath); // 批量处理其他含下划线的键,重复调用WriteIniString即可 // 示例: // WriteIniString('WIDTH', 'USER_ROLE', 'admin', IniFilePath); // WriteIniString('SETTINGS', 'AUTO_SAVE', '1', IniFilePath); end; end;
说明
WriteIniString函数完全支持包含下划线、特殊字符的键名,不受[INI]段的限制ssPostInstall确保写入操作在安装流程的后期执行,和[INI]段的默认执行时机匹配- 批量处理时只需重复调用
WriteIniString,传入对应段名、键名、值和文件路径即可
内容的提问来源于stack exchange,提问作者Lena Gavrilov
相关产品推荐
相关产品推荐

