在C#中调用Windows防火墙界面的常见方式

 更新时间:2025年11月23日 13:45:35   作者:降薪码农  
在 C# 中调用 Windows 防火墙界面(基础设置或高级安全设置),可以使用 进程启动(Process.Start) 或 Win32 API 来实现,所以本文给大家介绍了C#调用Windows防火墙界面的常见方式,需要的朋友可以参考下

引言

在 C# 中调用 Windows 防火墙界面(基础设置或高级安全设置),可以使用 进程启动(Process.Start) 或 Win32 API 来实现。以下是几种常见方式:

1. 直接启动防火墙界面

(1) 打开基本防火墙设置(firewall.cpl)

using System.Diagnostics;

Process.Start("firewall.cpl"); // 直接调用控制面板防火墙界面

(2) 打开高级防火墙设置(wf.msc)

Process.Start("wf.msc"); // 直接打开防火墙高级安全设置

2. 以管理员权限运行

由于防火墙设置通常需要 管理员权限,可以使用 ProcessStartInfo 提权运行

using System.Diagnostics;

var startInfo = new ProcessStartInfo
{
    FileName = "wf.msc",   // 或者 "firewall.cpl"
    UseShellExecute = true,
    Verb = "runas"         // 请求管理员权限
};

try
{
    Process.Start(startInfo);
}
catch (Exception ex)
{
    Console.WriteLine($"未能启动:{ex.Message}");
}

3. 调用控制面板的方式

如果希望 更加严格地调用系统控制面板,可以使用:

Process.Start("control.exe", "/name Microsoft.WindowsFirewall");

说明:Windows 11 可能使用新的设置界面,该方法适用于 Windows 10 及更早版本。

4. 使用 COM+ 控制防火墙(高级)

如果你希望在 C# 中动态管理防火墙规则(而不只是打开界面),可以使用 INetFwPolicy2

using System.Runtime.InteropServices;

public class FirewallHelper
{
    [DllImport("ole32.dll")]
    private static extern int CoCreateInstance(
        [In] ref Guid rclsid,
        IntPtr pUnkOuter,
        uint dwClsContext,
        [In] ref Guid riid,
        out INetFwPolicy2 firewallPolicy);

    [Guid("98325047-C671-4174-8D81-DEFCD3F03186"), InterfaceType(ComInterfaceType.InterfaceIsDual)]
    private interface INetFwPolicy2
    {
        int CurrentProfileTypes { get; }
        bool FirewallEnabled { [return: MarshalAs(UnmanagedType.VariantBool)] get; }
        // ... 其他方法
    }

    public static bool IsFirewallEnabled()
    {
        var guid = new Guid("E2B3C97F-6AE1-41AC-817A-F6F92166D7DD");
        var riid = new Guid("98325047-C671-4174-8D81-DEFCD3F03186");
        CoCreateInstance(ref guid, IntPtr.Zero, 1, ref riid, out INetFwPolicy2 policy);

        return policy.FirewallEnabled;
    }
}

注意

  • INetFwPolicy2 需要 管理员权限 才能调用。
  • 这种方法可以 读取防火墙状态、添加/删除规则,但不能 直接打开 GUI

5. 使用 Windows API 更深入地操控

如果要 精确控制规则(如放行端口/程序),可使用:

using NetFwTypeLib; // 需引用 COM "Windows Firewall Admin Type Library"

public static void AddFirewallRule()
{
    Type fwPolicyType = Type.GetTypeFromProgID("HNetCfg.FwPolicy2");
    INetFwPolicy2 fwPolicy = (INetFwPolicy2)Activator.CreateInstance(fwPolicyType);

    INetFwRule rule = (INetFwRule)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));
    rule.Name = "My Custom Rule";
    rule.Description = "Allow Port 8080";
    rule.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP;
    rule.LocalPorts = "8080";
    rule.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN;
    rule.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW;
    rule.Enabled = true;

    fwPolicy.Rules.Add(rule);
}

需要 管理员权限 且 引用 COM NetFwTypeLib(Windows Firewall Admin Type Library)

总结

需求方法是否需要管理员权限?
打开 普通防火墙界面Process.Start("firewall.cpl")❌ 不需要
打开 高级安全防火墙Process.Start("wf.msc")❌ 不需要
提权运行(确保打开成功)ProcessStartInfo + Verb="runas"✅ 需要
查看/修改防火墙规则INetFwPolicy2(COM)✅ 需要
动态管理防火墙规则NetFwTypeLib(COM 库)✅ 需要

如果你的目标是 简单地打开防火墙界面,方法 1 或 2 就足够了。
如果需要 编程方式管理规则,才需要 COM(方法 4/5)

以上就是在C#中调用Windows防火墙界面的常见方式的详细内容,更多关于C#调用Windows防火墙界面的资料请关注脚本之家其它相关文章!

相关文章

  • C#正则表达式匹配与替换字符串功能示例

    C#正则表达式匹配与替换字符串功能示例

    这篇文章主要介绍了C#正则表达式匹配与替换字符串功能,结合具体实例形式分析了C#字符串正则替换相关类、方法的使用技巧与相关注意事项,需要的朋友可以参考下
    2017-06-06
  • C#使用TCP协议实现数据发送和接受的方法

    C#使用TCP协议实现数据发送和接受的方法

    这篇文章主要介绍了c#使用TCP协议实现数据发送和接受,使用TCP协议实现数据的发送和接受包括客户端和服务端两个部分,本文通过实例代码介绍的非常详细,需要的朋友可以参考下
    2024-04-04
  • C#中重写tospring方法的实现

    C#中重写tospring方法的实现

    重写ToString方法允许你自定义对象的字符串表示形式,本文主要介绍了C#中重写tospring方法的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • C#编写发送邮件组件

    C#编写发送邮件组件

    本文给大家分享的是使用C#编写的发送邮件的组件,非常的简单实用,有需要的小伙伴可以参考下。
    2015-06-06
  • C#读取本地网络配置信息全攻略分享

    C#读取本地网络配置信息全攻略分享

    在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在 C# 编程的世界里,我们又该如何巧妙地读取这些至关重要的本地网络配置信息呢?接下来,就让我们一同踏上探索之旅
    2025-01-01
  • C#中AS和IS关键字的用法

    C#中AS和IS关键字的用法

    这篇文章主要介绍了C#中AS和IS关键字的用法的相关资料,需要的朋友可以参考下
    2016-03-03
  • C#实现生成mac地址与IP地址注册码的两种方法

    C#实现生成mac地址与IP地址注册码的两种方法

    这篇文章主要介绍了C#实现生成mac地址与IP地址注册码的两种方法,非常实用的技巧,需要的朋友可以参考下
    2014-09-09
  • C#获取应用程序路径或Web页面目录路径

    C#获取应用程序路径或Web页面目录路径

    这篇文章介绍了C#获取应用程序路径或Web页面目录路径的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • C#中ExcelDataReader的具体使用

    C#中ExcelDataReader的具体使用

    ExcelDataReader是一个轻量级的可快速读取Excel文件中数据的工具,本文主要介绍了C#中ExcelDataReader的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • C#泛型的使用及示例详解

    C#泛型的使用及示例详解

    这篇文章主要介绍了C#泛型的使用及示例,本文通过例子个大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08

最新评论