Inno Setup INI写入不会覆盖已存在的值,但始终会创建新值

时间:2017-02-02 21:24:19

标签: inno-setup

当我在inno-setup代码中创建INI部分时,即使密钥和部分存在,它也始终创建新密钥。我使用的代码如下。

[INI]
Filename: "{app}\Config\app.INI"; Section: "MAIN"; Key: "key1"; String: {code:Getkey1};  
Filename: "{app}\Config\app.INI"; Section: "MAIN"; Key: "key2"; String: {code:Getkey2};  
Filename: "{app}\Config\app.INI"; Section: "MAIN"; Key: "key3"; String: {code:Getkey3};  
Filename: "{app}\Config\app.INI"; Section: "MAIN"; Key: "key4"; String: {code:Getkey4};  

此INI文件最初看起来像这样

[MAIN]
key1=value
key2=value
key3=value
key4=value

并在安装后成为(请注意此ini位于已安装的文件中)

[MAIN]
key1=value1
key2=value2
key3=value3
key4=value4
[MAIN]
key1=value1
key2=value2
key3=value3
key4=value4

所以我的问题是如何让文件覆盖初始值而不是创建新的。

1 个答案:

答案 0 :(得分:1)

您的代码是正确的。

问题是99%,@RobeN has suggested in his comment

当INI文件具有UTF-8 BOM时,我确实可以重现该问题。

由于INI文件不支持UTF-8编码,因此INI文件解析器将BOM误解为第一行的一部分:

<bom>[MAIN]

因此它不会将第一行视为一个部分开始,因此它不会在文件中找到任何[MAIN]部分并创建一个新部分。

结论:确保INI文件中没有BOM。例如,如果在Windows记事本中创建INI文件,请使用 Ansi 编码保存文件。