我有一个类似这样的源文件设置:C:\Base,在 Base 中是FolderA、FolderB、FolderC等......我想在 Base 中的每个子文件夹上运行“heat dir”,这样我就得到了一个 WXS 文件,每个文件夹包含一个 ComponentGroup。
如果我运行热量(来自 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 等运行一次 heat。我不希望一个 heat 语句来处理所有文件夹。)
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:\Base 指定为SourceDir,则无法找到文件 RandomFile.txt 因为它正在查找对于 C:\Base\RandomFile.txt,而不是 C:\Base\FolderA\RandomFile.txt。我不能将 C:\Base\FolderA 指定为SourceDir,因为 FolderB、FolderC 等会是错误的。那么如何我要告诉 heat 在 '$(var.SourceDir)\' 和 'RandomFile.txt' 之间插入 'FolderA\'吗?
我看过Harvesting multiple directory in WiX,但第一个答案是太多的手动工作(我们正在寻找几乎完全自动化),第二个答案将所有内容放在一个 ComponentGroup 下的一个文件中,这将是我们维护的噩梦有数千个文件和数十个要安装的文件夹和子文件夹。