Inno Setup 复制了 .ini 文件中的第一部分 header

First section header in .ini file is duplicated by Inno Setup

我不明白为什么下面的行在 .ini 文件中创建了一个 second 重复部分 frmR,该文件已经包含一个部分名字.

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驱动器link)放在运行ning.

之前的一个名为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

上述发现并没有解决问题,因为我没有简单的方法来确保我正在写入的部分不是文件中的第一部分。

正如@Sertac 已经评论的那样,它肯定是 BOM。我不认为 Inno Setup 使用 BOM 创建 INI 文件。 BOM 就在第一个部分名称之前。 INI 文件 reading/writing 函数认为文件的第一行无效 - 不将其识别为节开头。删除 BOM。