C# 如何检测防火墙产品是否已启用?

C# 如何检测防火墙产品是否已启用?,c#,windows-applications,windows-firewall,windows-firewall-api,C#,Windows Applications,Windows Firewall,Windows Firewall Api,如果启用了防火墙产品,如何从用C编写的Windows窗体应用程序中检测 这是我的代码,我在INetFwMgr上发现了找不到类型或命名空间的错误 看看这个关于防病毒的问题,同样的API调用可以用来检测使用枚举的防火墙设置。这个问题的答案实际上是错误的,但它将为您提供非服务器计算机的答案。那个代码是C++的,但它只是你需要的Windows API调用,你也可以从C调用它。 NetFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", false);

如果启用了防火墙产品,如何从用C编写的Windows窗体应用程序中检测

这是我的代码,我在INetFwMgr上发现了找不到类型或命名空间的错误


看看这个关于防病毒的问题,同样的API调用可以用来检测使用枚举的防火墙设置。这个问题的答案实际上是错误的,但它将为您提供非服务器计算机的答案。那个代码是C++的,但它只是你需要的Windows API调用,你也可以从C调用它。
NetFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", false); 
INetFwMgr mgr = (INetFwMgr)Activator.CreateInstance(NetFwMgrType);
bool Firewallenabled = mgr.LocalPolicy.CurrentProfile.FirewallEnabled;
有关详细信息,请参阅链接

对于旧的Windows版本XP和Vista及以上版本,您可以使用


下面是一个用于检索防火墙设置的组件。

您首先需要将以下组件添加到项目中

INetFwMgr 然后,从家庭网络配置管理器CLSID(即{304CE942-6E39-40D8-943A-B913C40C9CD4}链接到C:\WINDOWS\system32\hnetcfg.dll)获取对象类型,可以在HKEY_CLASSES_ROOT\CLSID\{304CE942-6E39-40D8-943A-B913C40C9CD4}上找到该对象类型并使用收集的类型创建一个实例,使用该类型的默认构造函数作为新的INetFwMgr,该实例将用于检测是否使用INetFwMgr.LocalPolicy.CurrentProfile.FirewallEnabled启用了防火墙,该实例返回bool

谢谢, 我希望这对您有所帮助:

要将组件添加到项目中

右键单击“解决方案资源管理器”下的“引用” 项目名称并选择添加引用。。。 在COM选项卡下,选择要添加的组件,然后单击OK
我知道这是一个老帖子,但我找到了一个很好的解决办法! 读取在中找到的防火墙状态的注册表项:

HKEY\U LOCAL\U MACHINE\System\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfileKey:EnableFirewall

您还可以获取DomainProfile、PublicProfile和StandardProfile的值。你也可以得到防火墙规则。
我希望这会有所帮助:

只需从C://windows/system32/hnetcfg.dll和C://windows/system32/FirewallAPI.dll导入引用即可

然后使用

using NATUPNPLib;
using NETCONLib;
using NetFwTypeLib;

请注意,这将仅检测本地运行的防火墙应用程序。它不会也无法检测防火墙设备等。不会,但考虑到这个问题上的标签windows firewall等。我假设OP是指本地防火墙可能,我只是想完成。我只是想在本地机器上检查,当我点击纽约窗口窗体中的按钮时,它会检查防火墙状态的代码,那么你能帮助如何为此编写代码吗?@PavanAnadkat你能澄清一下吗,你想检查互联网上的计算机是否可以连接到计算机上的端口,或者本地计算机是否运行防火墙?这是两个非常不同的问题,有不同的解决方案。现在如何添加此组件?错误1找不到类型或命名空间名称“INetFwMgr”是否缺少using指令或程序集引用?c:\users\administrator.Mustupune\documents\visual studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs我收到此错误[检测windows防火墙是否阻止我的程序]http:您缺少using指令吗?是的。如何解决此问题?将名称空间Microsoft.TeamFoundation.Common添加到代码中。请参阅我的答案中的添加内容。没有类似Microsoft.TeamFoundation.Common的dll,但有Microsoft.TeamFoundation.WorkItemTracking.Client…我添加了此名称空间,但它仍然显示sam错误…我正在Framwork 2.0中运行我的应用程序,请参阅下面Jeetendra negi关于如何编译此代码的回答。
private const string CLSID_FIREWALL_MANAGER = "{304CE942-6E39-40D8-943A-B913C40C9CD4}"; //This is the CLSID of Home Networking Configuration Manager. We'll use this to detect whether the Firewall is enabled or not
private static NetFwTypeLib.INetFwMgr GetHNCMType()
{
    Type objectType = Type.GetTypeFromCLSID(new Guid(CLSID_FIREWALL_MANAGER)); //Creates a new GUID from CLSID_FIREWALL_MANAGER getting its type as objectType
    return Activator.CreateInstance(objectType) as NetFwTypeLib.INetFwMgr; //Creates an instance from the object type we gathered as an INetFwMgr object
}
static void Main(string[] args)
{
    INetFwMgr manager = GetHNCMType(); //Initializes a new INetFwMgr of name manager from GetHNCMType
    if (manager.LocalPolicy.CurrentProfile.FirewallEnabled == false) //Continue if the firewall is not enabled
    {
        //The firewall is not enabled
        Console.WriteLine("OFF"); //Writes OFF to the Console in a new line
    }
    else //Otherwise:
    {
        //The fire wall is enabled
        Console.WriteLine("ON"); //Writes ON to the Console in a new line
    }
}
public static bool isFirewallEnabled() {
        try {
            using (RegistryKey key = Registry.LocalMachine.OpenSubKey("System\\CurrentControlSet\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\StandardProfile")) {
                if (key == null) {
                    return false;
                } else { 
                    Object o = key.GetValue("EnableFirewall");
                    if (o == null) {
                        return false;
                    } else {
                        int firewall = (int)o;
                        if (firewall == 1) {
                            return true;
                        } else {
                            return false;
                        }
                    }
                }
            }
        } catch {
            return false;
        }
    }
using NATUPNPLib;
using NETCONLib;
using NetFwTypeLib;