有关通过防火墙扩展在wix安装程序中添加防火墙例外的问

我是Wix安装程序的新手.我正在尝试为我的程序添加防火墙例外.

我的代码如下:

<Component Id="_VIEW.EXE" Guid="*" Transitive="yes">
     <File Id="view.exe"
           Name="view.exe"
           KeyPath="yes"
           Source="$(var.INSTALLSOURCE)\view.exe">
       <fire:FirewallException Id="view_firewall_domain_tcp"
                               Name="View"
                               Protocol="tcp"
                               Scope="any"
                               IgnoreFailure="yes"
                               Profile="domain" />
       <fire:FirewallException Id="view_firewall_domain_udp"
                               Name="View"
                               Protocol="udp"
                               Scope="any"
                               IgnoreFailure="yes"
                               Profile="domain" />
       <fire:FirewallException Id="view_firewall_private_tcp"
                               Name="View"
                               Protocol="tcp"
                               Scope="any"
                               IgnoreFailure="yes"
                               Profile="private" />
       <fire:FirewallException Id="view_firewall_private_udp"
                               Name="View"
                               Protocol="udp"
                               Scope="any"
                               IgnoreFailure="yes"
                               Profile="private" />
     </File>
  </Component>

在我的代码中,我添加了4个防火墙例外,每个异常对“Profile”和“Protocol”属性都有不同的值.我的预期结果是创建了4个例外:

NAME  GROUP   Profile   Enabled  Action  Override  Program           Local Address   Remote Address   Protocol   Local Port   Remote Port   Allowed Users  Allowed Computers
view          Domain     Yes     Allow    No       c:\test\view.exe    Any               Any            TCP         Any         Any             Any            Any
view          Domain     Yes     Allow    No       c:\test\view.exe    Any               Any            UDP         Any         Any             Any            Any
view          Private    Yes     Allow    No       c:\test\view.exe    Any               Any            TCP         Any         Any             Any            Any
view          Private    Yes     Allow    No       c:\test\view.exe    Any               Any            UDP         Any         Any             Any            Any

但实际结果是只创建了一个异常,并且“Protocol”属性的值为“any”而不是“TCP”或“UDP”:

NAME  GROUP   Profile   Enabled  Action  Override  Program           Local Address   Remote Address   Protocol   Local Port   Remote Port   Allowed Users  Allowed Computers
view          Domain     Yes     Allow    No       c:\test\view.exe    Any               Any            Any         Any         Any             Any            Any

所以,我有两个问题:

>为什么只创建一个例外?例外的名称必须是唯一的吗?
>为什么“Protocol”属性的值不生效?

我推荐一个关于防火墙扩展的官方文档:
http://wixtoolset.org/documentation/manual/v3/xsd/firewall/firewallexception.html
在文档中,我看到了一些关于“文件”属性的描述:

Identifier of a file to be granted access to all incoming ports and protocols. If you use File, you cannot also use Program.
If you use File and also Port or Protocol in the same FirewallException element, the exception will fail to install on Windows XP and Windows Server 2003. IgnoreFailure=”yes” can be used to ignore the resulting failure, but the exception will not be added.

这是否意味着如果我为程序设置防火墙规则,即使我设置“协议”,“协议”和“端口”属性也将自动为“任何”?

最佳答案
现有的wix FirewallException自定义操作使用XP / Server2003 Windows防火墙API.在此API中,为特定可执行文件设置防火墙例外意味着将对该例外打开所有端口和所有协议.

供参考,XP/Server2003 firewall API interfaces.请注意,INetFwOpenPort能够获取/设置端口,而INetFwAuthorizedApplication则没有.

如果要在程序上创建防火墙例外并明确限制端口,协议和域,则需要使用Vista附带的Windows“高级”防火墙API.看看这些参考文献:
Highlevel overview
Reference guide
Command-line reference guide

遗憾的是,没有人为wix实现了使用这些更新API的AdvancedFirewallException扩展.也许我会开展一个kickstarter活动,看看是否有兴趣为开发提供资金; P

转载注明原文:有关通过防火墙扩展在wix安装程序中添加防火墙例外的问 - 代码日志