You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过Inno Setup在编译时自动创建XML数据库?

可以用Inno Setup实现该需求

下面是具体的实现方案,核心是利用Inno Setup的Pascal脚本在编译阶段处理文件并生成目标XML:

实现步骤与代码

  1. 编写Pascal脚本,在编译时遍历指定的XML数据库文件
  2. 从文件名提取语言代码,读取XML文件中的Version属性
  3. 动态生成目标XML结构并保存到指定路径

完整示例代码

[Setup]
AppName=Public Talks Update Installer
AppVersion=1.0
DefaultDirName={pf}\PublicTalks
OutputDir=Output

[Files]
Source: "MSA_PublicTalks_???.xml"; DestDir: "{param:InstallPath}"; Flags: ignoreversion

[Code]
procedure InitializeSetup;
var
  SourcePath, FileName, LangCode, VersionStr: String;
  SearchRec: TSearchRec;
  XmlDoc, RootNode, DbNode: Variant;
begin
  // 设置源文件路径(对应安装程序中的源文件目录)
  SourcePath := ExpandConstant('{src}');
  // 创建XML文档对象
  XmlDoc := CreateOleObject('MSXML2.DOMDocument.6.0');
  XmlDoc.async := False;
  XmlDoc.preserveWhiteSpace := True;
  // 创建根节点
  RootNode := XmlDoc.createElement('PublicTalkTitleUpdates');
  XmlDoc.appendChild(RootNode);

  // 遍历所有符合命名规则的XML文件
  if FindFirst(SourcePath + '\MSA_PublicTalks_*.xml', faAnyFile, SearchRec) = 0 then
  begin
    repeat
      FileName := SearchRec.Name;
      // 提取语言代码:从文件名中截取对应位置的字符
      LangCode := LowerCase(Copy(FileName, Length('MSA_PublicTalks_') + 1, 3));
      // 读取XML文件中的Version属性
      if XmlDoc.Load(SourcePath + '\' + FileName) then
      begin
        VersionStr := XmlDoc.documentElement.getAttribute('Version');
        // 创建Database节点并设置属性
        DbNode := XmlDoc.createElement('Database');
        DbNode.setAttribute('Language', LangCode);
        DbNode.setAttribute('Version', VersionStr);
        RootNode.appendChild(DbNode);
      end;
    until FindNext(SearchRec) <> 0;
    FindClose(SearchRec);
  end;

  // 保存生成的XML文件到指定路径(示例为编译输出目录)
  XmlDoc.Save(ExpandConstant('{output}\PublicTalkTitleUpdates.xml'));
end;

代码说明

  • 遍历文件:使用FindFirst/FindNext遍历源目录下所有符合命名规则的XML文件
  • 提取语言代码:通过字符串截取从文件名中提取3位语言代码,并转为小写格式
  • 读取版本号:利用MSXML对象加载XML文件,读取根节点的Version属性值
  • 生成XML:动态构建目标XML的节点结构,最终保存到指定路径

注意事项

  • 编译环境需确保存在MSXML 6.0(Windows系统默认自带该组件)
  • 若文件名中的语言代码长度不是3位,需调整字符串截取的参数
  • 可根据实际需求修改生成XML的保存路径,比如直接指定到网站发布目录

内容的提问来源于stack exchange,提问作者Andrew Truckle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 14:55:16