WiX 3.7使用Microsoft Bootstrapper

时间:2013-03-25 08:36:02

标签: wix wix3.7

我是WiX的新手。我在wix安装项目中找到了直接包含Microsoft Bootsrappers的教程。不幸的是,wix3.7无法实现,因为它希望使用WiX一个Bootstrapper项目来检查先决条件。

如何在我的WiX 3.7 Bootstrapper项目中使用Microsoft提供的Bootstrappers?

1 个答案:

答案 0 :(得分:0)

如果您已构建要包含在WiX Bootstrapper项目中的Microsoft Bootstrapper,则在Wix / Bundle / Chain下创建一个ExePackage元素(通常位于名为Bundle.wxs的文件中)。列出ExePackage下Payload元素中所需的每个文件。

使用文本模板(.tt)可以轻松生成列表。不幸的是,WiX项目(.wixproj)不提供添加或构建此类文件。简单的解决方法是创建一个空的C#项目,在那里添加一个文本模板文件,并将生成的WiX文件添加到您的WiX项目中。

以下是示例文本模板:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ output extension=".wxs" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.IO" #>
    <!-- 
    Generated file list for a WixBootstrapper project
    <#=DateTime.Now.ToString("s")#>
-->
<#
// Assumes all projects are in sibling folders so relative paths can be used
  var thisProjectDir = new FileInfo(this.Host.TemplateFile).Directory;
  var appProjectDir = Path.GetFullPath(thisProjectDir + @"\..\DemoApplication");
  var sourceFiles = Directory
      .GetFiles(appProjectDir + @"\publish", "*.*",  SearchOption.AllDirectories)
      .Select(s => s.Replace(appProjectDir, @"..\DemoApplication"));
  var payloads = sourceFiles
      .Select(s => String.Format("<Payload SourceFile='{0}' Name='{1}' />", s, s.Replace(@"..\DemoApplication\publish\", "")));
  #>
  <Fragment>
    <PackageGroup Id="DemoApplicationBootstrapper">
      <ExePackage InstallCommand="Setup.exe" SourceFile="<#=sourceFiles.FirstOrDefault(s=>s.Contains("setup.exe"))#>">
<# foreach (var payload in payloads) { #>
        <#=payload#>
<# } #>
      </ExePackage>
    </PackageGroup>
  </Fragment>
</Wix>

它在.wxs文件中生成WiX片段。在Bundle.wsx中使用PackageGroupRef而不是ExePackage。

VS提示:要将现有文件添加到项目而不复制它,请单击“添加”按钮旁边的下拉箭头,然后选择“添加为链接”。

构建提示:通常,文本转换仅在保存模板时执行。当输出依赖于其他文件时,这不起作用。要转换每个构建版本,请使用TransformOnBuild

替代

另一方面,您可能更喜欢不使用Microsoft Bootstrapper。然后,您必须将每个引用的包重新创建为一个或多个Wix Bootstrapper ExePackage或MsiPacakges元素。例如,如果您依赖SQL Server Compact Edition 4.0,则可以查看C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\SQL Server Compact Edition 4.0\EN\package.xml,查看所需的安装文件和命令,并根据该信息编写ExePackage元素。