我是WiX的新手。我在wix安装项目中找到了教程,其中包括。不幸的是,这在wix3.7中是无法实现的,因为它期望使用WiX,一个引导程序项目来检查先决条件。
如何在我的WiX 3.7 Bootstrapper项目中使用微软提供的引导程序?
发布于 2013-03-30 16:59:16
如果您已经构建了希望包含在WiX 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>它在WiX文件中生成一个.wxs片段。在您的PackageGroupRef中使用PackageGroupRef而不是ExePackage。
VS提示:若要在不复制项目的情况下将现有文件添加到项目中,请单击add按钮旁边的下拉箭头,然后选择"Add“。
构建提示:通常,只有在保存模板时才执行文本转换。当输出依赖于其他文件时,这种方法不能很好地工作。要对每个构建进行转换,请使用http://msdn.microsoft.com/en-us/library/ee847423%28v=vs.100%29.aspx。
替代方案
另一方面,您可能不喜欢使用Microsoft Bootstrapper。然后,必须将每个引用的包重新创建为一个或多个、ExePackage或MsiPacakges元素。例如,如果您依赖于4.0,您可以查看C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\SQL Server Compact Edition 4.0\EN\package.xml,查看所需的安装文件和命令,并根据该信息编写一个ExePackage元素。
https://stackoverflow.com/questions/15610597
复制相似问题