如何将整个目录或项目输出添加到WiX安装包中。

53
我们决定从VS集成环境转向WiX。然而,我们目前所做的是使用项目输出文件作为设置项目的输入。这使我们能够轻松地将应用程序文件添加到目录中(例如图片、示例和其他资源...),并在构建时自动将这些文件添加到设置中。
我没有在WiX中找到任何类似的功能。WiX似乎要求每个目录和文件都有一个目录条目和一个文件条目。这将要求我们在每次添加文件时更改WiX源代码,这对我来说是不可行的,因为我们有很多这样的文件。
是否有一种与WiX集成的方法可以实现这一点,还是我必须编写自己的任务,在调用candle之前创建WiX源代码?
5个回答

24
对于WiX 2.0,tallow功能非常有限;paraffin和mallow提供了额外的功能。对于WiX 3.0,heat提供了与tallow相同的功能,略微更好一些。
在我的情况下,我使用了mallow源码并稍作修改后使用它,因为paraffin需要3.5版本的.Net。
您可以使用Mallow或Paraffin工具来生成WiX片段: 入门指南WiX之痛更好的tallow,Paraffin下载针对WiX 3.0的Paraffin

很好的链接,Sundar。非常感谢。我编辑了答案,使其成为完整的官方答案。 - Coincoin

19

我一直在使用WIX 3.5中的heat.exe来实现这个目的。不过上次我检查时,文档没有更新到3.5发布的版本,请注意这一点。

以下是一个示例:

"$(WIX)bin\heat.exe" dir "$(SourcePath)" -cg MyFiles -gg -scom -sreg -sfrag -dr INSTALLDIR -out "$(ProjectDir)Fragments\FileFragment.wxs" -var wix.InstallerPath


4

目前MapGuide开源项目正在使用John Robbins的Paraffin 3.0,正如其他人所指出的。

基本上,在给定版本的首次运行期间,我们将使用“generate”操作运行我们的安装程序脚本,为每个源文件夹创建具有特定选项的新.wxs文件。

在同一版本的后续构建中,调用“regen”操作以确保.wxs文件已更新为添加的任何新文件/目录。

我认为Heat v3现在也允许您执行大量(或者可能全部?)此操作,正如Brian Rogers所写。 我仍然更喜欢Paraffin以更明确地维护静态GUID的方式,但当前的Heat看起来是一个不错的选择。


2
<Target Name="BeforeBuild"><HeatDirectory OutputFile="$(ProjectDir)\files.wxs" PreprocessorVariable="var.MyProject.TargetDir" ComponentGroupName="MainProject" SuppressUniqueIds="false" Directory="var.MyProject.TargetDir" DirectoryRefId="INSTALLDIR" AutoGenerateGuids="true" SuppressRegistry="true" SuppressRootDirectory="true" ToolPath="$(WixToolPath)" NoLogo="true" /></TargetName>. 在 Project.WixProj 中。将 "MyProject" 替换为您想要包含其编译文件的项目。您需要在 wix 项目中添加该项目作为引用,以使 var.MyProject.TargetDir 存在。 - TamusJRoyce

3
经过进一步研究,似乎有一个名为tallow.exe的二进制文件可以实现此功能。它通过递归搜索文件来创建目录的片段。

哦,你每天都学到新东西!我没意识到tallow会这样。=) - EdgarVerona

-1
在我的使用WIX的过程中,我从未遇到过一种功能,可以让您一次添加整个目录的文件。这是因为给定的文件有很多用途(系统不知道您是否稍后想要引用该文件夹中的特定文件等等...它需要知道它们),而且安装本身需要非常具体。
但这并不妨碍您编写自己的WIX前端,以在解析目录结构内容后生成WIX XML文件(或其部分)。这基本上就是我们在工作中使用的某些系统所做的事情。这与任何代码或文本文件生成实用程序的想法相同。只需遍历树形结构,并生成适当的文本即可。
编辑:以这种方式,您可以将WIX视为定义设置的“低级语言”,将您的实用程序视为“高级语言”。如果您需要编写一个,请告诉我们。
此外,您可以通过将此实用程序添加到VStudio中的自定义构建步骤中,使WIX文件在构建过程的一部分生成。这样,您实际上没有“保存的WIX文件”供任何人构建,系统只会在最后构建它,在后期构建步骤中自动考虑新文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接