У меня есть сторонний MSI, который был предоставлен мне поставщиком. Однако MSI не стоит в одиночку, для завершения установки требуется несколько файлов поддержки (DLL, файлы конфигурации, драйверы устройств ...). Я попытался установить без этих файлов, присутствующих в каталоге с MSI, и он жалуется на недостающие файлы во время установки. Кажется, это странный способ создания установщика. Во всяком случае, я хотел бы объединить эту «установку», которая будет использоваться Burn. Раньше я использовал MSIPackage, но это работает для одного файла. Как я могу указать эту группу файлов? Я испытываю соблазн создать новую MSI, которая включает MSI от третьего лица плюс дополнительные файлы, но затем я получаю установленную фантомную программу, которая действительно не то, что я хочу.Bundle несколько файлов поддержки для WiX Burn
Заранее за вашу помощь.
EDIT с раствором:
Большое спасибо Тому за ключи к этой проблеме. Для тех, кому интересно, это код и шаги, которые я использовал для решения этой проблемы в 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>
Затем я создал фрагмент для компонента и ссылки на группу Payload
<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>
Спасибо за решение. Добавление к xsl дает более чистый результат. –
Herman