以编程方式将应用程序添加到所有配置文件Windows防火墙(Vista +)

时间:2011-04-12 21:27:53

标签: c# windows firewall

我已经搜索过,并且在SO上也有类似的问题,但是,没有人谈论如何向“All Profile”添加例外(Windows 7,在Vista / Windows Server 2008上的AKA“Any Profile”)。互联网上的例子谈论仅添加到当前配置文件。

原因是我的虚拟机有一个问题:windows 2008 x86,当前的防火墙配置文件是Domain,我的应用程序被添加到Domain的Exception列表中。 (防火墙设置为默认设置:阻止任何不在例外列表中的入站呼叫。) 但是,入站呼叫仍会被阻止,除非: 1.关闭该虚拟机上的防火墙。 2.手动将我的应用程序的规则配置文件更改为“任何”

这是非常令人困惑的,因为我认为只有活动的配置文件应该是“活动的”并且应该是有效的,无论其他配置文件阻止我的应用程序入站呼叫。

我正在使用XPSP2 INetFwMgr接口来添加缺少“任何”配置文件支持的异常。

我正在使用c#,但任何有示例的语言都会受到赞赏。

1 个答案:

答案 0 :(得分:8)

您可以尝试这样的事情:

using System;
using NetFwTypeLib;

namespace FirewallManager

{
  class Program
  {
    static void Main(string[] args)
    {
        INetFwRule firewallRule = (INetFwRule)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));
        firewallRule.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW;
        firewallRule.Description = "Allow notepad";
        firewallRule.ApplicationName = @"C:\Windows\notepad.exe";
        firewallRule.Enabled = true;
        firewallRule.InterfaceTypes = "All";
        firewallRule.Name = "Notepad";

        INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(
            Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
        firewallPolicy.Rules.Add(firewallRule);

    }
  }
}

为了完整起见,请添加对c:\ Windows \ System32 \ FirewallAPI.dll

的引用