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”时使主机组成为变量的语法是什么?

WIX 目录搜索总是失败

Wix - 如何从安装目录安装后运行exe文件?

使用 WiX 创建 IIS 虚拟目录

Wix 自定义卸载操作 - 如何在 msi 删除文件之前运行

安全地解决 Wix 中的重复组件 GUID