如何在同一组件组下创建具有不同目录的组件?

时间:2017-07-26 08:38:50

标签: wix wix3.7 heat

如何在同一组件组下创建具有不同目录的组件?

Sample Heat命令: “%WIX%bin \ heat.exe”dir%SOURCE%\%VERSION%-srd -dr 视频 -cg 加密 -gg -nologo -out abc.wxs - 模板:片段

2 个答案:

答案 0 :(得分:0)

如果您手动编辑从Heat工具输出的abc.wxs文件,则可以根据需要将组件移动到不同的目录。您可以在ComponentGroup中放置多个ComponentRef元素,以链接到您想要组合在一起的不同组件:

<ComponentGroup Id="MyComponentGroup">
    <ComponentRef Id="Component1"/>
    <ComponentRef Id="Component2"/>
    <ComponentRef Id="Component3"/>
</ComponentGroup>

这允许将几个组件组合在一起,允许整个组很容易被类似的ComponentGroupRef元素引用。

答案 1 :(得分:0)

heat.exe背后的想法是你可以给它一个文件夹来分析和生成要安装的组件(以及包含组件的子目录)。通常你会有一个root安装文件夹。所以,让我们说您的安装目录结构如下所示:

\MyProgramRoot
    \Video <-- The folder you are referencing in the heat.exe command.
    \SomeOtherFolder
    \Etc

如果是这种情况,我建议您在应用程序的实际根目录上运行heat,即MyProgramRoot。根据前面的示例,您的命令需要以下内容:

"%WIX%bin\heat.exe" dir %SOURCE%\%VERSION% -srd -dr MyProgramRoot -cg Encrypted -gg -nologo -out abc.wxs -template:fragment

这里会发生什么,你仍然会得到一个组件组加密,但heat.exe也会生成各种子目录,视频,SomeOtherFolder,Etc,以及其中的所有组件。

但是,假设您的文件夹结构不是单根,即:

C:\One\Path\To\Install\Video
C:\Another\Path\To\Install\SomeOtherFolder
C:\Yet\Another\Path\To\Install\Etc

这会带来一个问题,因为heat.exe专门为单个根目录生成WiX代码。在这种情况下,我会为我的应用程序的所有根目录调用heat.exe,并为每个根目录生成组件组。然后,您只需在相应的Feature元素中引用这些组件组,如下所示:

<Feature Id="MyMainFeature">
    <ComponentGroupRef Id="VideoComponentGroup" />
    <ComponentGroupRef Id="SomeOtherComponentGroup" />
    <ComponentGroupRef Id="EtcComponentGroup" />
</Feature>

有关Heat.exe(也称为收获工具)功能的更多信息,请查看official documentation