如何在同一组件组下创建具有不同目录的组件?
Sample Heat命令: “%WIX%bin \ heat.exe”dir%SOURCE%\%VERSION%-srd -dr 视频 -cg 加密 -gg -nologo -out abc.wxs - 模板:片段
答案 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。