1

我有一个要安装大量文件的安装程序。我正在使用 heat.exe 来收集所有文件。这个 heat 命令实际上是我的构建脚本的一部分,后面跟着 Candle.exe 和 light.exe 等其他命令。现在,我的应用程序 test.exe 也使用自动生成的 GUID 和组件 ID 获得。如何将此特定应用程序添加为防火墙例外。问题是每次我使用脚本构建安装程序时,都会生成一个带有新组件 ID 的新收获文件。有什么建议么?

4

1 回答 1

1

heat接受一个 XSL 转换参数,以您需要的任何方式修改其输出。File一个简单的 XSL 样式表可以将一个元素添加到通过 XPath 选择的特定元素。

这假设只有test.exe在你的heat运行中。如果不是这种情况,请修改match属性中的 XPath:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:wix='http://schemas.microsoft.com/wix/2006/wi'
    xmlns:fire='http://schemas.microsoft.com/wix/FirewallExtension'
    xmlns='http://schemas.microsoft.com/wix/2006/wi'
    exclude-result-prefixes='wix'
    >
  <xsl:output method="xml" indent="yes" />

  <xsl:template match="//wix:File[contains(@Source,'\test.exe')]">
    <wix:File>
      <xsl:copy-of select="@*" />
      <fire:FirewallException Id='test.exe' Name='Test Server' IgnoreFailure='yes'>
        <xsl:comment> localhost won't work here </xsl:comment>
        <fire:RemoteAddress>127.0.0.1</fire:RemoteAddress>
      </fire:FirewallException>
      <xsl:apply-templates select="node()" />
    </wix:File>
  </xsl:template>

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()" />
    </xsl:copy>
  </xsl:template>

  <xsl:template match="/">
    <xsl:comment>!!!DO NOT EDIT!!! Generated by heat.exe and FirewallExceptions added.</xsl:comment>
      <xsl:apply-templates />
  </xsl:template>

</xsl:stylesheet> 
于 2013-07-07T15:48:11.987 回答