【问题标题】:First section header in .ini file is duplicated by Inno Setup.ini 文件中的第一节标题由 Inno Setup 复制
【发布时间】:2018-12-23 23:38:23
【问题描述】:

我不明白为什么下面的行会在已包含具有该名称的部分的 .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 Drive 链接)放在一个名为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

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

【问题讨论】:

  • 您是否在没有 BOM 的情况下进行了测试?
  • @SertacAkyuz 不,我没有在没有 BOM 的情况下进行测试。这些 ini 文件(带有 BOM)由 Inno 创建,因此我认为测试无 BOM 文件不会提供任何额外信息。
  • 可能不会。这只是一个想法。

标签: inno-setup ini


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    相关资源
    最近更新 更多