inno setup修改xml節點
1、在做客戶端多語言的安裝包時,配置寫在了xml檔案中(而不是ini檔案),就需要在安裝的最後修改xml檔案的多語言節點,方法為:
[Code]
// 獲取當前語言
function MyLangName(): String;
begin
Result := ActiveLanguage();
end;
//儲存xml檔案的語言
procedure SaveLan();
var
XMLFile: String; // xml路徑
KeyName: String; // 語言節點名稱
KeyValue: String; // 語言節點值
XMLDocument: Variant; // xml文件
rootNode: Variant; // xml根節點
lanNode: Variant; // 語言節點
begin
XMLFile := ExpandConstant('{app}\') + '***.xml';// xml路徑
KeyName := 'language';
KeyValue := MyLangName();
XMLDocument := CreateOleObject('MSXML2.DOMDocument');
XMLDocument.async := False;
XMLDocument.resolveExternals := False;
XMLDocument.load(XMLFile);// 載入
rootNode := XMLDocument.documentElement;
lanNode := rootNode.SelectSingleNode('base');// 語言節點
lanNode.SetAttribute(KeyName, KeyValue); // set 語言
XMLDocument.Save(XMLFile);// 儲存
end;
xml檔案為:
<?xml version='1.0' encoding='utf-8'?>
<base language="English"/>
另外一個問題就是,程序SaveLan什麼時候呼叫的問題,這裡是要安裝完成後,在執行程式之前就要修改節點,可使用CurPageChanged或CurStepChanged程序,如:
// step,不能用ssDone,否則安裝完啟動時還來不及設定語言
procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of ssPostInstall:
SaveLan();
end;
end;
在安裝完成後,會自動呼叫該程序。至此,修改xml完成。
2、ini檔案修改欄位
[Code]
function MyLangName(Param:String): String;
begin
Result := ActiveLanguage();
end;
[INI]
Filename: "lan.ini"; Section: "settings"; Key: "language"; String: "{code:MyLangName}";