首页 > 解决方案 > .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

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

标签: inno-setupini

解决方案


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


推荐阅读