我的源文件设置如下: C:\ Base ,在Base中 FolderA , FolderB , FolderC 等....我想在Base的每个子文件夹上运行“heat dir”,这样我就会得到一个包含每个文件夹的一个ComponentGroup的WXS文件。
如果我跑热(来自C :)
heat dir Base\FolderA -cg FolderAGroup -gg -scom -sreg -sfrag -dr -var var.SourceDir INSTALLDIR -out Components-FolderA.wxs
(或来自C:\ Base的' heat dir FolderA ... ')
(请注意,我会从每个FolderA,FolderB等运行一次来自脚本的热量。我不希望有一个热量语句来处理所有文件夹。)
Components-FolderA.wxs looks like this:
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="INSTALLDIR">
<Directory Id="dirA..." Name="FolderA">
<Component Id="cmpF..." Guid="{GUID-HERE}">
<File Id="filB..." KeyPath="yes" Source="$(var.SourceDir)\RandomFile.txt" />
</Component>
</Directory>
</DirectoryRef>
</Fragment>
<Fragment>
<ComponentGroup Id="FolderAGroup">
<ComponentRef Id="cmpF..." />
</ComponentGroup>
</Fragment>
</Wix>
这个问题是 Source =“$(var.SourceDir)\ RandomFile.txt 使用我指定的任何 SourceDir 。所以如果我指定C:\以 SourceDir 为基础,无法找到文件RandomFile.txt,因为它正在寻找C:\ Base \ RandomFile.txt,而不是C:\ Base \ FolderA \ RandomFile.txt。我不能将C:\ Base \ FolderA指定为 SourceDir ,因为FolderB,FolderC等...将是错误的。那么如何告诉heat在'$(var'之间插入'FolderA'' .SourceDir)\'和'RandomFile.txt'?
我看过Harvesting multiple directories in WiX,但第一个答案是手动工作太多(我们看起来几乎完全自动化),第二个答案是将所有内容放在一个ComponentGroup下的一个文件中,这将是一个维护噩梦,因为我们有数千个文件和几十个要安装的文件夹和子文件夹。