WiX 3.7 использует Microsoft Bootstrapper

Я новичок в WiX. Я нашел туториалы, включающие Microsoft Bootsrappers непосредственно в проект установки wix. К сожалению, это невозможно с wix3.7, так как предполагается использовать WiX как проект Bootstrapper для проверки предварительных требований.

Как использовать предоставленные загрузчики от Microsoft в моем проекте загрузчика WiX 3.7?


person float    schedule 25.03.2013    source источник


Ответы (1)


Если вы создали Microsoft Bootstrapper, который хотите включить в проект WiX Bootstrapper, создайте для него элемент ExePackage в разделе Wix/Bundle/Chain (обычно в файле с именем Bundle.wxs). Перечислите все файлы, необходимые в элементе Payload в разделе ExePackage.

Список легко создается с помощью текстового шаблона (.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 вместо ExePackage в вашем Bundle.wsx.

Совет VS. Чтобы добавить существующий файл в проект, не копируя его, щелкните стрелку раскрывающегося списка рядом с кнопкой "Добавить" и выберите "Добавить как ссылку".

Совет по сборке. Обычно преобразования текста выполняются только при сохранении шаблона. Это не работает, когда вывод зависит от других файлов. Для преобразования каждой сборки используйте TransformOnBuild.

Альтернатива

С другой стороны, вы можете предпочесть не использовать Microsoft Bootstrapper. Затем вам нужно будет воссоздать каждый упомянутый пакет как один или несколько элементов ExePackage или MsiPacakges Wix Bootstrapper. Например, если у вас есть зависимость от 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 на основе этой информации.

person Tom Blodget    schedule 30.03.2013