爲了實現這一點,我創建一個簡單的程序,它接受XML文件名作爲輸入。該過程應解析每行並將內容寫入臨時文件。代碼檢查每一行尋找字符串「鍵=‘名稱’」:
if (Pos('key="Name"', strTest) <> 0)
如果找到匹配,那麼我通過我的期望的變量,它的value
是從我的自定義頁面變得替換特定的行。
strTest := ' <add key="Name" value="' + strName + '"/> ';
這會寫入臨時文件。然後刪除原始的exe.config文件並將temp配置文件重命名爲exe.config文件(從而反映出我需要的更改)。下面是該過程的整個代碼段,也不要忘記從[文件]調用過程,即
[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;
[Inno Setup修改基於自定義輸入的XML文件的可能的重複] (http://stackoverflow.com/questions/8141886/inno-setup-modify-xml-file-based-on-custom-input) – Deanna 2012-03-07 13:49:29