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

C# 以编程方式将应用程序添加到所有配置文件Windows防火墙(Vista+;),c#,windows,firewall,C#,Windows,Firewall,我四处搜索过,也有类似的问题,但是,没有人谈论如何在“所有配置文件”(Windows7,又称Vista/WindowsServer2008上的“任何配置文件”)中添加例外。互联网上的示例仅讨论添加到当前配置文件 原因是我的一个虚拟机有问题:windows 2008 x86,当前防火墙配置文件是域,我的应用程序被添加到域的异常列表中。(防火墙设置为默认设置:阻止任何不在例外列表中的入站呼叫。) 但是,入站呼叫仍然被阻止,除非: 1.关闭此虚拟机上的防火墙。 2.手动将我的应用程序的规则配置文件更改

我四处搜索过,也有类似的问题,但是,没有人谈论如何在“所有配置文件”(Windows7,又称Vista/WindowsServer2008上的“任何配置文件”)中添加例外。互联网上的示例仅讨论添加到当前配置文件

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

这是非常混乱的,因为我认为只有活动配置文件应该是“活动的”,并且应该是功能性的,不管其他配置文件是否阻止我的应用程序入站调用

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


我正在使用c#但任何带有示例的语言都将受到欢迎。

您可以尝试以下内容:

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的引用

我尝试过这样做,但当我在system firewall中看到防火墙规则时,没有可执行路径附加到该规则,为什么会这样?如果该规则已经存在,会发生什么情况?它会继续增加吗?