inno-setup - .ini 文件中的第一节标题由 Inno Setup 复制
问题描述
我不明白为什么下面的行会在已经包含具有该名称的部分的文件中创建第二个重复部分。frmR
.ini
SetIniString('frmR', 'update', 'true', 'C:\junk\test.ini');
安装程序运行后test.ini
的文件内容:
我们认为这可能是编码问题(我们使用的是 5.6.1 (u) 版本)。但是十六进制查看器中的部分名称也是相同的:
test.ini
十六进制文件内容:
文件的前后版本在test.ini
这里:https ://drive.google.com/open?id=1vamZxgTvYpAQcOwOnrTpGG63_Bg7i0Js
下面是.iss
演示此问题的准系统文件。将test.ini
(来自上面的 Google Drive 链接)放在C:\junk
运行前命名的文件夹中。
[Code]
procedure DeinitializeSetup();
begin
SetIniString('frmR', 'update', 'true', 'C:\junk\test.ini');
end;
我发现只有当该部分是文件中的第一部分时才会出现此问题。换句话说,下面的文件可以正常工作(没有添加任何重复的部分):
[Test section]
Test=test
[frmR]
Top=28
Left=0
上述发现并没有解决问题,因为我没有简单的方法来确保我正在写入的部分不是文件中的第一部分。
解决方案
正如@Sertac 已经评论的那样,它肯定是 BOM。我不认为 Inno Setup 使用 BOM 创建 INI 文件。BOM 就在第一个部分名称之前。INI 文件读取/写入函数认为文件的第一行无效 - 不将其识别为节开始。删除物料清单。
推荐阅读
- javascript - Axios:如何一个接一个地运行多个请求?
- python - 支持 cue sheet 的 Python 音频播放库
- python - 对于二值图像分类模型,model.predict() 函数始终返回 1
- azure - Azure 数据工厂计划的管道触发器并不总是有效
- firebase - Flutter Web App,Firebase.auth 无法正常工作。试图调用一个非函数,比如null。'dart.global.firebase.auth'
- simulation - 动态力传递模拟
- angular - 角度测试错误 - this._formBuilder.group 不是函数
- ios - 尝试从 firebase 获取用户时出错
- c++ - C++ 缓冲区溢出(大小为 8 的无效读取)
- javascript - 如何在 MySQL 中结束连接?