如何在 WiX 安装程序中将应用程序添加为防火墙例外

Posted

技术标签:

【中文标题】如何在 WiX 安装程序中将应用程序添加为防火墙例外【英文标题】:How to add an application as Firewall exception in WiX installer 【发布时间】:2013-07-07 09:43:47 【问题描述】:

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

【问题讨论】:

你不能像here 描述的那样使用netsh advfirewall fitewall add 将自定义操作添加为脚本 其实我想试试 WiXFirewallExtension。 wix.sourceforge.net/manual-wix3/… fileid 在你的情况下稳定吗?在这种情况下,您确实可以使用该扩展程序。 这就是问题所在。实际上这个领域并不稳定。 Heat 是指包含所有要安装的文件的文件夹。并且应用程序处于某个更改阶段,因此每次该源目录中都会有一些不同版本的应用程序 【参考方案1】:

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

这假设您的 heat 运行中只有 test.exe。如果不是这样,请修改 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> 

【讨论】:

出了点问题。我正在为 schemas.microsoft.com/wix/2006/wi" xmlns:fire 下面的文件提供我的输出="schemas.microsoft.com/wix/… Id="Test.exe" Name="Test Server" IgnoreFailure="yes">127.0.0.1 不要让放置 XML 命名空间前缀声明 (xmlns:...) 打扰您; XSL 处理器可以将它们放在对输出文档具有相同语义的任何位置。如果您认为还有其他问题,请在您的问题中发布该输出 - 它在评论中被破坏和/或不完整。

以上是关于如何在 WiX 安装程序中将应用程序添加为防火墙例外的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 2008 中将目录添加到 CAB 项目

如何在wix中将属性传递给回滚自定义操作?

如何使用 wix 安装程序添加公司名称

如何使用 WiX 安装程序更改添加/删除程序名称?

如何在 Wix 中添加命令行参数

如何将 UI 添加到 WiX 3 安装程序?