我不知道为什么下面的行在frmR
文件中创建一个 second 重复节.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云端硬盘链接)放在名为C:\junk
的文件夹中。
[Code]
procedure DeinitializeSetup();
begin
SetIniString('frmR', 'update', 'true', 'C:\junk\test.ini');
end;
我发现仅当该节是文件中的 first 节时,才会出现此问题。换句话说,下面的文件可以正常工作(不添加任何重复的部分):
[Test section]
Test=test
[frmR]
Top=28
Left=0
上面的发现不能解决问题,因为我没有简单的方法来确保要写入的部分不是文件的第一部分。
答案 0 :(得分:1)
正如@Sertac所说,肯定是BOM。我认为Inno Setup不会使用BOM创建INI文件。 BOM表位于第一个部分名称的前面。 INI文件读取/写入功能认为文件的第一行无效-不会将其标识为节开头。删除物料清单。