10

本着 Si 提出的这个问题的精神:WiX 技巧和技巧。我正在尝试确定基于目录创建 wix 片段的最佳方法。文件收割,可以这么说。例如,在 bin\release 文件夹下,我可以有许多不同的文件夹以及我想在片段中轻松捕获的文件。我一直在通过键入它们或使用 wixedit 来做到这一点。

请注意,我没有尝试任何只是在这里进行研究的东西:A)我读了一点关于热量的东西。(http://installing.blogspot.com/2006/04/heatexe-making-setup-easier.html)我不确定是否从 msbuild 运行它?B)我从 Newagesolution 找到了这篇讨论使用 t4 脚本的博客文章:http: //blog.newagesolution.net/2008/06/how-to-use-msbuild-and-wix-to-msi.html

我想知道其他人正在做什么来解决这个问题。

问候,布赖恩

4

3 回答 3

13

好的,丹尼尔我绝对同意使用加热,但我认为 Rob 为我最终使用的东西指明了正确的方向。

我最终使用的是 HeatDirectory。(请注意,我不打算打补丁。如果你想打补丁,你可能想看看另一个解决方案,但是 heat/heat 目录可以用于打补丁。)不幸的是,Rob 的回答是非常有限,所以我不会说他真的回答了我的问题。只是为我指明了正确的方向。感谢 Rob 和 Daniel 的帮助。

因此,我自己回来回答了这个问题。

障碍...

我遇到的障碍 1 是网络上几乎没有关于如何从 Visual Studio 中实现热任务/热目录(热包装在 msbuild 中)的文档。请注意,从 msbuild 运行的包装器似乎很新,我拒绝使用您自担风险等。由于缺乏文档,我向 wix 用户列表发送了一封电子邮件。我得到了布赖恩·罗杰斯的帮助。谢谢布赖恩,这为我解决了一切。在这里查看他的精彩博客文章,以更好地了解热量如何帮助您实现自动化: http://icumove.spaces.live.com/blog/cns!FB93073C6534B681! 461.entry

障碍 2 使用热量后,我发现我没有按照推荐的方式使用组件,但我不得不拼凑所有的推理。如果您没有 Windows 安装程序的先验知识,我认为很多人在使用 Wix 时会遇到这种情况。因此,我建议您阅读:如果您是像我一样使用 Windows Installer 的新手,请确保您也阅读组件规则。来自 MS 的组件规则:http: //msdn.microsoft.com/en-us/library/aa370561.aspx . 阅读 Rob Mensching 的这些内容,以更好地理解组件:http ://robmensching.com/blog/posts/2003/10/4/Windows-Installer-Components-Introduction http://robmensching.com/blog/posts/2003 /10/18/组件-规则-101 有关 Windows 安装程序的额外阅读,请检查 Windows 安装程序团队的这些规则(规则 16:遵循组件规则):http: //blogs.msdn.com/windows_installer_team/archive/2006/05/12/595950.aspx

障碍 3 每次安装新版本时,您必须决定是否要修补文件或升级。幸运的是我不需要打补丁,因此每次升级我都会像这样卸载以前的版本:如何实现 WiX 安装程序升级?. 这大大简化了事情。修补时,您将需要完全控制事物。当您希望许多除了 wix 构建 msi 字段之外对 wix 一无所知的开发人员想要自动化/自动构建时,这会更加困难。似乎这可以使用热量,但我不确定。

障碍 4 对我来说,我花了一点时间来弄清楚为什么包含我的预处理器变量的包含文件不起作用。我终于弄明白了。您必须将文件包含在您的 .wxs 文件中,如下所示:有关详细信息,请参见此处: 将文本文件内容包含到 WiX 脚本中

http://wix.sourceforge.net/manual-wix2/preprocessor.htm

障碍 5 由于我正在使用 mix 的主要升级,并且我想将颠覆挂钩到我的产品编号中。我认为这很简单,如果你知道怎么做。我在这里遇到了麻烦,也不得不为此寻求帮助。

障碍 6 通过基于 bin 文件夹的热更新文件,一切正常。好吧,几乎是自动的,如果 dll 引用等有任何冲突,那么文件将不会包含在安装程序中,因此可能无法正常运行。您需要有一个测试过程,以便在安装后测试您的程序。如果您错过了一个 dll,这可能很关键。我还建议您跟踪程序使用的 dll 并与 msi 文件进行比较。

现在使用 HeatDirectory 的解决方案(在 Brian Rogers(wix 团队)的帮助下):

 <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == ''">Debug</Configuration>
   <OutputName>msbuild.heatfile</OutputName>
   <OutputType>Package</OutputType>
   <WixToolPath>..\..\YourHeatDir</WixToolPath>
   <WixToolPath>$(WixToolPath)</WixToolPath>
   <Cultures>en-us</Cultures>
   <LinkerBaseInputPaths>..\..\data\HeatDir</LinkerBaseInputPaths>
 </PropertyGroup>
 <ItemGroup>
   <Compile Include="product.wxs" />
   <Compile Include="TestDir.wxs" />
 </ItemGroup>
 <Import Project="$(WixToolPath)\Wix.targets" />
 <UsingTask TaskName="HeatDirectory"
   AssemblyFile="$(WixToolPath)WixUtilExtension.dll" />
 <Target Name="BeforeBuild">
   <HeatDirectory
      Directory="..\..\data\HeatDir"
      DirectoryRefId="DataDir"
      OutputFile="TestDir.wxs"
      AutogenerateGuids="true"
      ToolPath="$(WixToolPath)" />
 </Target>

这需要粘贴到您的项目文件中,并且需要更改适当的设置/路径。这将执行您指定路径中的所有文件并创建一个 TestDir.wxs 文件,然后您可以按组件组引用该文件。有几个 Heatdirectory 选项,您需要查看 heat 源代码以了解详细信息。

仅供参考:在发布我的问题后,我在 stackoverflow 上找到了这篇文章:如何将整个目录或项目输出添加到 WiX 包 另外作为参考我刚刚在这里看到了这篇文章: Harvesting a .csproj with heat.exe in Visual Studio 2008和 WiX(v3)。同样,这可以使用热任务来完成。
两者都讨论了使用第三方工具。一个叫Mallow,另一个叫Paraffin。我认为石蜡看起来很受支持,并且几乎可以做热所做的事情。添加一些内容:有关详细信息,请参见此处:http: //www.wintellect.com/cs/blogs/jrobbins/archive/2007/10/18/wix-hints-for-new-users-part-1-of- 3.aspx

无论如何希望这对其他人有帮助。

于 2009-04-28T11:39:54.260 回答
3

新的 HeatTasks 在这里可能非常适合您。他们可以从 Visual Studio 中的其他项目中提取项目输出组。它在最新版本中的表现比旧版本好得多,因此请务必每周阅读一次http://wixtoolset.org/releases/

于 2009-04-02T20:29:05.153 回答
0

事实上,我们正在使用 msbuild 中的 heat.exe。如果您像我一样挑剔,那么 heat 的输出可能并不是您想要的,但这很容易通过 XSL 转换来纠正(我相信 heat.exe 有一个专门用于此目的的命令行参数)。

于 2009-04-02T17:39:58.070 回答