如何使用Inno Setup在新安装时将{app}值写入XML配置文件
你可以直接通过Inno Setup的内置脚本能力操作XML配置文件,不需要通过注册表中转,方案如下:
步骤1:修改[Files]段配置
在原有配置的AfterInstall参数中新增自定义函数调用,传入安装路径:
Source: "CutToolsBcad.dll.config"; DestDir: "{app}"; Flags: ignoreversion; Check: IsAvailable('BRX', '21', 'x64'); AfterInstall: SetupDemandload('BRX', '21', 'x64'); UpdateConfigXml(ExpandConstant('{app}'))
步骤2:新增[Code]段逻辑
添加XML修改的实现函数,直接写入目标节点:
[Code] procedure UpdateConfigXml(InstallPath: string); var XmlDoc: Variant; XmlNode: Variant; ConfigPath: string; begin // 拼接配置文件的完整路径 ConfigPath := ExpandConstant('{app}\CutToolsBcad.dll.config'); if not FileExists(ConfigPath) then Exit; // 加载MSXML操作对象 XmlDoc := CreateOleObject('MSXML2.DOMDocument.6.0'); XmlDoc.async := False; XmlDoc.preserveWhiteSpace := True; // 保留原文件的缩进格式,不破坏其他配置 if not XmlDoc.load(ConfigPath) then Exit; // 定位到需要修改的目标节点 XmlNode := XmlDoc.selectSingleNode('/configuration/userSettings/CutTools.Properties.Settings/setting[@name=''SaveToDXF_OutputFolder'']/value'); if VarIsEmpty(XmlNode) then Exit; // 写入安装路径值 XmlNode.text := InstallPath; // 保存修改后的配置文件 XmlDoc.save(ConfigPath); end;
可选优化
如果需要仅在新安装场景才写入配置,升级安装时保留用户原有配置,可以调整AfterInstall的逻辑,增加安装类型判断:
AfterInstall: SetupDemandload('BRX', '21', 'x64'); if WizardIsNewInstall() then UpdateConfigXml(ExpandConstant('{app}'))
内容的提问来源于stack exchange,提问作者Andrew Truckle
相关产品推荐
相关产品推荐

