我需要使用文本文件中包含的文件列表动态创建安装程序。
文件列表包含来自许多不同目录的单个文件,并且很容易定期更改。我正在尝试创建一个安装程序,每次创建新版本的文件列表时都不需要更新。
到目前为止,我从cmd脚本中的命令行调用heat.exe,我在其中使用for循环遍历文件列表,对每个文件运行heat命令以创建组件的片段。
FOR /F "delims=;" %%a IN (FileList.txt) DO (heat.exe file "%%a" -cg ComponentGroupName -gg -g1 -sfrag -dr DirectoryName %%~da -out "%~dp0%%~na.wxs")
显然,这段代码会给每个ComponentGroup提供相同的名称,这会带来一个问题,但我可以通过使用组件组名称中的文件名来解决这个问题。
我正在努力解决的问题是如何将组件组的名称添加到Project.wsx文件中的要素元素中。
我已阅读了 Wix Toolset Documentation Manual以及书籍WiX 3.6: A Developer's Guide to Windows Installer XML中的相关章节,但无法了解如何执行此操作。
我很欣赏我可以使用某种形式的文本替换来实现这一点,但我希望Wix工具集中内置了一些东西,因为我不能成为第一个需要动态创建热量生成组件的人。
答案 0 :(得分:1)
我想出了一个可接受的问题解决方案。 我正在做的是运行cmd文件来生成热量组件。这些组件中的每一个都存储在它自己的componentGroup中,由id" ComponentGroup" +文件列表中文件的迭代计数器。
在生成了热量组件之后,我在另一个wxs文件中创建了另一个ComponenGroup,该文件包含对由heat创建的每个ComponentGroup的ComponentGroupRefs。
由于这个ComponentGroup是从cmd文件创建的,我知道我的ID,我可以在我的功能中引用它。
@echo off
setlocal enabledelayedexpansion
set /a count = 0
FOR /F "delims=;" %%a IN (FileList.txt) DO (
set /a count=count+1
heat.exe file "%%a" -cg "ComponentGroup!count!" -gg -g1 -sfrag -dr NotSureWhatGoesHereYet %%~da -out "%~dp0%%~na.wxs"
)
(
echo ^<?xml version="1.0" encoding="utf-8"?^>
echo ^<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"^>
echo ^<Fragment^>
echo ^<ComponentGroup Id="ComponentGroup"^>
) > test.wxs
FOR /L %%i IN (1,1,%count%) DO (
echo ^<ComponentGroupRef Id="ComponentGroup%%i" /^> >> Components.wxs
)
(
echo ^</ComponentGroup^>
echo ^</Fragment^>
echo ^</Wix^>
) >> Components.wxs
感谢回复人员。 @TomBlodget我从你的第一个答案中汲取灵感。谢谢你的时间