【发布时间】:2017-07-26 08:38:49
【问题描述】:
如何在同一个组件组下创建不同目录的组件?
样品加热命令: "%WIX%bin\heat.exe" 目录 %SOURCE%\%VERSION% -srd -dr 视频 -cg 加密 -gg -nologo -out abc.wxs -模板:片段
【问题讨论】:
如何在同一个组件组下创建不同目录的组件?
样品加热命令: "%WIX%bin\heat.exe" 目录 %SOURCE%\%VERSION% -srd -dr 视频 -cg 加密 -gg -nologo -out abc.wxs -模板:片段
【问题讨论】:
如果您手动编辑作为 Heat 工具输出的 abc.wxs 文件,您可以根据需要将组件移动到不同的目录。您可以在 ComponentGroup 中放置多个 ComponentRef 元素,以链接到要组合在一起的不同组件:
<ComponentGroup Id="MyComponentGroup">
<ComponentRef Id="Component1"/>
<ComponentRef Id="Component2"/>
<ComponentRef Id="Component3"/>
</ComponentGroup>
这允许将多个组件组合在一起,从而使整个组很容易被相似的 ComponentGroupRef 元素引用。
【讨论】:
heat.exe 背后的想法是,您可以给它一个单独的文件夹来分析和生成要安装的组件(以及包含组件的子目录)。通常你会有一个根安装文件夹。因此,假设您的安装目录结构如下所示:
\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
这里发生的情况是,您仍然会得到一个组件组,Encrypted,但heat.exe 也会生成各种子目录,Video , 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(也称为Harvest 工具)功能的更多信息,请查看official documentation。
【讨论】: