捆绑WiX Burn的多个支持文件

前端之家收集整理的这篇文章主要介绍了捆绑WiX Burn的多个支持文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个供应商提供给我的第三方MSI.但是,MSI并不孤立,它需要多个支持文件(dll,配置文件,设备驱动程序……)才能完成安装.我试图安装没有这些文件存在于MSI目录中,它抱怨安装过程中丢失的文件.在我看来,这是一种构建安装程序的奇怪方法.无论如何,我想捆绑这个“装置”以供Burn使用.我之前使用过MSIPackage,但这适用于单个文件.我该如何指定这组文件?我很想制作一个新的MSI,其中包括来自第三方的MSI以及其他文件,但后来我最终安装了一些幻像程序,这真的不是我想要的.

在此先感谢您的帮助.

解决方案编辑:

非常感谢Tom提供此问题的关键.对于那些好奇的人来说,我在WiX 3.8中用来解决这个问题的代码和步骤.

首先收获存储第三方安装程序的目录.

  1. "%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是引用应用程序安装文件位置的预处理器变量.

我的转换文件与Tom链接文件略有不同,但并不多.我在我的原始热文件中创建了一个组件组,然后将其用作我的PayloadGroup,而不是DirectoryRef.

  1. <xsl:stylesheet version="1.0"
  2. xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  3. xmlns:wix="http://schemas.microsoft.com/wix/2006/wi"
  4. xmlns="http://schemas.microsoft.com/wix/2006/wi">
  5.  
  6. <xsl:template match="/">
  7. <Wix>
  8. <Fragment>
  9. <xsl:apply-templates select="*" />
  10. </Fragment>
  11. </Wix>
  12. </xsl:template>
  13.  
  14. <xsl:template match="//wix:ComponentGroup">
  15. <PayloadGroup>
  16. <xsl:attribute name="Id">
  17. <xsl:value-of select="@Id"/>
  18. </xsl:attribute>
  19. <xsl:apply-templates select="*" />
  20. </PayloadGroup>
  21. </xsl:template>
  22.  
  23. <xsl:template match="//wix:File">
  24. <Payload>
  25. <xsl:attribute name="SourceFile">
  26. <xsl:value-of select="@Source"/>
  27. </xsl:attribute>
  28. </Payload>
  29. </xsl:template>
  30.  
  31. </xsl:stylesheet>

然后我为组件创建了一个片段并引用了Payload组

  1. <Fragment>
  2. <PackageGroup Id="PCKGRP_AppName">
  3. <MsiPackage
  4. SourceFile="$(var.AppNameDir)\app.msi">
  5. <MsiProperty Name="PropertyName1" ="Value1"/>
  6. <MsiProperty Name="PropertyName2" ="Value2"/>
  7. <MsiProperty Name="PropertyName3" ="Value3"/>
  8. <PayloadGroupRef Id="PAYGROUP_AppName"/>
  9. </MsiPackage>
  10. </PackageGroup>
  11. </Fragment>

然后最后引用链中的组

  1. <Chain>
  2. ...
  3. <PackageGroupRef Id="PCKGRP_AppName"/>
  4. ...
  5. </Chain>
在MsiPackage元素内部使用一堆Payload元素(或将有效负载放在别处并使用 PayloadGroupRef).

作为补偿,由于MsiPackage开始爆炸,你的引导程序可能会得到更好的压缩,因为双重压缩在时间和空间上都是低效的.

猜你在找的Windows相关文章