如何在 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>
【讨论】:
出了点问题。我正在为以上是关于如何在 WiX 安装程序中将应用程序添加为防火墙例外的主要内容,如果未能解决你的问题,请参考以下文章