Для этого я создал простую процедуру, которая принимает имя файла xml в качестве входного.Процедура должна проанализировать каждую строку и записать содержимое во временный файл.Код проверяет каждую строку в поисках строки 'key = "Name"':
if (Pos('key="Name"', strTest) <> 0 )
. Если совпадение найдено, я заменяю эту конкретную строку желаемым тегом, из которого получается value
с моей пользовательской страницы.
strTest := ' <add key="Name" value="' + strName + '"/> ';
Это записывается во временный файл.Затем я удаляю исходный файл exe.config и переименовываю временный файл конфигурации в файл exe.config (таким образом, отражая необходимые мне изменения).Ниже приведен весь фрагмент кода для процедуры, и не забудьте вызвать процедуру из [Files], т.е.
[Files]
Source: "HUS.exe.config"; DestDir: "{app}"; AfterInstall: ConvertConfig('HUS.exe.config')
Фрагмент кода
procedure ConvertConfig(xmlFileName: String);
var
xmlFile: String;
xmlInhalt: TArrayOfString;
strName: String;
strTest: String;
tmpConfigFile: String;
k: Integer;
begin
xmlFile := ExpandConstant('{app}') + '\' + xmlFileName;
tmpConfigFile:= ExpandConstant('{app}') + '\config.tmp';
strName := UserPage.Values[0] +' '+ UserPage.Values[1];
if (FileExists(xmlFile)) then begin
// Load the file to a String array
LoadStringsFromFile(xmlFile, xmlInhalt);
for k:=0 to GetArrayLength(xmlInhalt)-1 do begin
strTest := xmlInhalt[k];
if (Pos('key="Name"', strTest) <> 0 ) then begin
strTest := ' <add key="Name" value="' + strName + '"/> ';
end;
SaveStringToFile(tmpConfigFile, strTest + #13#10, True);
end;
DeleteFile(xmlFile); //delete the old exe.config
RenameFile(tmpConfigFile,xmlFile);
end;
end;