Объедините несколько файлов поддержки для WiX Burn
У меня есть сторонний MSI, предоставленный мне поставщиком. Однако MSI не является самостоятельным, он требует нескольких файлов поддержки (DLL, файлы конфигурации, драйверы устройств ...) для завершения установки. Я пытался установить без этих файлов в каталоге с MSI, и он жалуется на отсутствующие файлы во время установки. Мне кажется, это странный способ собрать установщик. В любом случае, я хотел бы связать эту «установку» для использования Burn. Я использовал MSIPackage раньше, но это работает для одного файла. Как бы я указать эту группу файлов? Я испытываю желание сделать новый MSI, который включает MSI от третьей стороны плюс дополнительные файлы, но затем я получаю некоторую установленную фантомную программу, которая на самом деле не то, что я хочу.
Заранее спасибо за помощь.
РЕДАКТИРОВАТЬ с Решением:
Большое спасибо Тому за ключи к этой проблеме. Для тех, кому интересно, вот код и шаги, которые я использовал для решения этой проблемы в WiX 3.8.
Сначала соберите каталог, в котором хранился сторонний установщик.
"%WIX%bin\heat.exe" dir "$(ProjectDir)..\ThirdParty\AppDirectory" -dr Dir_AppName -cg PAYGROUP_AppName -ag -sreg -scom -srd -var "var.AppNameDir" -t "$(ProjectDir)\ComponentToPayload.xsl" -out "$(ProjectDir)AppNamePayloadGroup.wxs"
кудаAppNameDir переменная препроцессора, ссылающаяся на расположение файлов установки приложения.
Мой файл трансформации немного отличался от того, на который ссылался Том, но не сильно. Я создал группу компонентов в моем оригинальном тепловом файле, а затем использовал ее в качестве моей PayloadGroup позже, а не DirectoryRef.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wix="http://schemas.microsoft.com/wix/2006/wi"
xmlns="http://schemas.microsoft.com/wix/2006/wi">
<xsl:template match="/">
<Wix>
<Fragment>
<xsl:apply-templates select="*" />
</Fragment>
</Wix>
</xsl:template>
<xsl:template match="//wix:ComponentGroup">
<PayloadGroup>
<xsl:attribute name="Id">
<xsl:value-of select="@Id"/>
</xsl:attribute>
<xsl:apply-templates select="*" />
</PayloadGroup>
</xsl:template>
<xsl:template match="//wix:File">
<Payload>
<xsl:attribute name="SourceFile">
<xsl:value-of select="@Source"/>
</xsl:attribute>
</Payload>
</xsl:template>
</xsl:stylesheet>
Затем я создал фрагмент для компонента и сослался на группу полезной нагрузки.
<Fragment>
<PackageGroup Id="PCKGRP_AppName">
<MsiPackage
SourceFile="$(var.AppNameDir)\app.msi">
<MsiProperty Name="PropertyName1" ="Value1"/>
<MsiProperty Name="PropertyName2" ="Value2"/>
<MsiProperty Name="PropertyName3" ="Value3"/>
<PayloadGroupRef Id="PAYGROUP_AppName"/>
</MsiPackage>
</PackageGroup>
</Fragment>
И, наконец, ссылка на группу в цепочке
<Chain>
...
<PackageGroupRef Id="PCKGRP_AppName"/>
...
</Chain>