WiX 在运行热时使子目录成为组件组
Posted
技术标签:
【中文标题】WiX 在运行热时使子目录成为组件组【英文标题】:WiX Make a Sub-Dir a Component Group when running heat 【发布时间】:2013-06-26 20:32:59 【问题描述】:大家好,我的 WiX 伙伴们,
我想知道这是否可能,如果可以,我可以去哪里学习如何做到这一点,在一个目录上运行 heat 并让其中的每个目录成为它自己的组件组。
例子:
根目录 子目录 1 子子目录 1 子子目录 2 子子目录 3 子目录 2 子子目录 1 子子目录 2 子子目录 3 子目录 3 子子目录 1 子子目录 2 子子目录 3然后在VS2010项目的Build Event中运行一个heat命令(下例):
heat dir "Root Directory" -gg -sfrag -srd -dr INSTALLFOLDER -out MyWXS.wxs
然后让 WXS 文件的结构如下:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirecotryRef Id="INSTALLFOLDER">
<Directory Id="dir84156489" Name="Sub Dir 1"> ... </Directory>
<Directory Id="dir84156489" Name="Sub Dir 2"> ... </Directory>
<Directory Id="dir84156489" Name="Sub Dir 3"> ... </Directory>
</DirectoryRed>
</Fragment>
<Fragment>
<ComponentGroup Id="Sub Dir 1"> ... </ComponentGroup>
<ComponentGroup Id="Sub Dir 2"> ... </ComponentGroup>
<ComponentGroup Id="Sub Dir 3"> ... </ComponentGroup>
</Fragment>
</wix>
如果我的问题有任何混淆,或者如果有人对我有任何其他问题,请告诉我。谢谢你,我期待收到你的来信。
编辑 使用以下 xslt 文件,我得到以下 WXS 结构:
**XLST File**
<?xml version="1.0" encoding="utf-8"?>
**WXS File Result**
<Wix>
<Fragment>
<DirectoryRef Id="INSTALLFOLDER">
<Directory Id="dir846546" Name="SubDir1"> ... </Directory>
<Directory Id="dir846546" Name="SubDir2"> ... </Directory>
<Directory Id="dir846546" Name="SubDir3"> ... </Directory>
</DirectoryRef>
</Fragment>
<wix:Fragment xmlns:wix="http://schemas.microsoft.com/wix/2006/wi">
<wix:ComponentGroup Id="SubDur1"> ... </wix:ComponentGroup>
</wix:Fragment>
<wix:Fragment xmlns:wix="http://schemas.microsoft.com/wix/2006/wi">
<wix:ComponentGroup Id="SubDur2"> ... </wix:ComponentGroup>
</wix:Fragment>
<wix:Fragment xmlns:wix="http://schemas.microsoft.com/wix/2006/wi">
<wix:ComponentGroup Id="SubDur3"> ... </wix:ComponentGroup>
</wix:Fragment>
</Wix>
无论我做什么,我都无法将目录创建为组件组...
【问题讨论】:
【参考方案1】:Heat 可以在发出其输出之前进行 XSL 转换。只需添加 -t transform.xsl
参数。
所需要的只是将一些组件组附加到输出中。通过在一级目录上匹配,然后引用所有后代组件来生成组件组。
请参阅我的 answer 的 XSL 以解决类似问题。
【讨论】:
谢谢!看起来它可以满足我的需要,但是如果您可以查看更新后的问题并让我知道我做错了什么,那将非常感谢! 你有一个拼写错误:DriectoryRef。我认为您几乎想要我链接的内容,但首先获得任何结果是获得正确结果的一步? 好的,我进行了更改,问题已更新以反映新文件 现在您为 Sub Dir 1 和兄弟姐妹各有一个 ComponentGroup,根据需要将 ComponentGroupRef Id="SubDir1" 等添加到 Feature 元素。当安装程序为组件安装文件时,它会创建放置它所需的目录子树。组件已经与具有产生热量的结构的目录相关联。 感谢您的所有帮助 :-)以上是关于WiX 在运行热时使子目录成为组件组的主要内容,如果未能解决你的问题,请参考以下文章
在“inventory_hostname”时使主机组成为变量的语法是什么?