C# 如何启用/禁用防火墙?

C# 如何启用/禁用防火墙?,c#,.net,windows,firewall,C#,.net,Windows,Firewall,该接口允许应用程序或服务访问防火墙策略 我正在使用visual studio 2017 问题与此有关 代码有点不同,我有问题禁用防火墙 禁用防火墙前的逻辑正常 public Task<StatusCodeResult> ResetFirewallStatus() { Type netFwPolicy2Type = Type.GetTypeFromProgID("HNetCfg.FwPolicy2"); d

该接口允许应用程序或服务访问防火墙策略

我正在使用visual studio 2017

问题与此有关

代码有点不同,我有问题禁用防火墙

禁用防火墙前的逻辑正常

        public Task<StatusCodeResult> ResetFirewallStatus()
        {
            Type netFwPolicy2Type = Type.GetTypeFromProgID("HNetCfg.FwPolicy2");
            dynamic mgr = Activator.CreateInstance(netFwPolicy2Type);

            var fwCurrentProfileTypes = mgr.CurrentProfileTypes;

            // Get current status
            bool firewallEnabled = mgr.FirewallEnabled(fwCurrentProfileTypes); // return true

            // Disables Firewall
            mgr.FirewallEnabled(false); //breaks here !!!!


            return Task.FromResult<StatusCodeResult>(Ok());
        }

您有两个问题,编写这段代码的后期绑定并不完全有助于实现这一目标。添加对c:\windows\system32\firewallapi.dll的引用,以便您可以直接使用INetFwPolicy2接口,这有助于正确使用它。您要解决的一个难题是FirewallEnabled属性是一个索引属性。在C语言中没有对等的语言。无论如何,晚做需要:

bool firewallEnabled=mgr.firewallEnabled(fwCurrentProfileTypes)

MSDN文档特别警告,不能使用CurrentProfileTypes返回的值。它需要指定一个。我建议您使用:

  int profile = 2;   // 1=domain, 2=private, 4=public
  bool firewallEnabled = mgr.FirewallEnabled[profile];
请注意,在COM实现的属性的特定情况下,索引属性允许使用[尖括号]

经理可防火墙(错误)//在这里休息

您必须选择要禁用的特定配置文件。正确的语法如下所示:

  mgr.FirewallEnabled[profile] = false;
请注意,只有当您的程序以管理员权限运行时,才能修补防火墙。如果尚未添加,请添加

  mgr.FirewallEnabled[profile] = false;