Inno setup 是否有办法使用Inno Setup删除INI文件中的注释?

Inno setup 是否有办法使用Inno Setup删除INI文件中的注释?,inno-setup,ini,Inno Setup,Ini,是否有办法使用Inno Setup删除INI文件中的注释?我们有一个正在运行更新的现有安装,但我们希望使用Inno安装程序删除现有注释。可用标志不适用于注释,仅适用于设置: 标志此参数是一组额外选项。可能有多种选择 通过用空格分隔它们来使用。以下选项是 支持: CreateKeyIfDoesnTextist仅当文件中不存在密钥时,才将该密钥指定给该密钥。如果未指定此标志,则密钥将 无论它是否已经存在,都可以设置 取消删除条目卸载程序时删除条目。这可以与uninsdeletesectionifem

是否有办法使用Inno Setup删除INI文件中的注释?我们有一个正在运行更新的现有安装,但我们希望使用Inno安装程序删除现有注释。可用标志不适用于注释,仅适用于设置:

标志此参数是一组额外选项。可能有多种选择 通过用空格分隔它们来使用。以下选项是 支持:

CreateKeyIfDoesnTextist仅当文件中不存在密钥时,才将该密钥指定给该密钥。如果未指定此标志,则密钥将 无论它是否已经存在,都可以设置

取消删除条目卸载程序时删除条目。这可以与uninsdeletesectionifempty标志结合使用

取消删除节卸载程序时,删除条目所在的整个节。显然不会 在Windows本身使用的分区上使用此选项是一个好主意 (如WIN.INI中的某些部分)。你应该只在手机上使用这个 应用程序的专用部分

未删除节如果为空与未删除节相同,但仅当节中没有键时才删除该节。这可以结合起来 使用UnisDeleteEntry标志


我想删除任何以
开头的行
[Section]
之后、文件结尾之前或
[AnotherSection]
使用如下代码:

const
CP_UTF8=65001;
函数DeleteIniSectionComments(节,文件名:字符串):布尔值;
变量
行:t字符串;
划分:布尔;
行:字符串;
一、 N:整数;
开始
结果:=假;
行:=TStringList.Create;
尝试
如果未从文件incp(文件名、行、CP_UTF8)加载StringsFromFileIncp,则
开始
日志(格式('加载文件%s'时出错,[FileName]);
结束
其他的
开始
日志(格式('加载文件%s,有%d行',[FileName,lines.Count]);
不确定:=假;
N:=1;
I:=0;
当我数的时候
开始
行:=修剪(行[I]);
如果(行='')或(行[1]=';'),则
开始
如果没有信心那么
开始
日志(格式('删除空行或注释行%d',[N]);
删除第(I)款;
结束
其他的
开始
公司(一);
结束;
结束
其他的
开始
如果(行[1]='[')和(行[Length(Line)]=']'),则
开始
如果CompareText(Trim(复制(行,2,长度(行)-2)),Section)=0,则
开始
日志(格式('在第%d行找到第%s节,[section,N]));
不确定:=正确;
结束
其他的
开始
如果没有信心那么
开始
日志(格式(第%s节在第%d行结束,[Section,N]));
不确定:=假;
结束;
结束;
结束;
公司(一);
结束;
公司(N),;
结束;
结果:=SaveStringsToFileInCP(文件名、行、CP\u UTF8);
如果没有结果的话
开始
日志(格式('保存文件%s'时出错,[FileName]);
结束;
结束;
最后
行。免费;
结束;
结束;
LoadStringsFromFileInCP
SaveStringsToFileInCP
来自。虽然如果您不需要UTF-8(纯INI文件毕竟使用Ansi编码),您可以使用内置的
LoadStringsFromFile
SaveStringsToFile

您可以在
ssInstall
ssPostInstall
步骤中调用
deleteinissectioncomments

虽然依我看,一旦你有了这样一个代码,你的最终目标是实际删除整个部分,那么将代码更改为“删除整个部分,包括注释”,而不仅仅是删除注释是有意义的