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

2025-11-23 18:50

本文主要是介绍在C#中调用Windows防火墙界面的常见方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《在C#中调用Windows防火墙界面的常见方式》在C#中调用Windows防火墙界面(基础设置或高级安全设置),可以使用进程启动(Process.Start)或Win32API来实现,所以本文给大家...

引言

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

1. 直接启动防火墙界面

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

using System.Diagnostics;

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

(2) 打开高级防火墙设javascript置(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("9832504www.chinasem.cn7-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.GetjsTypeFromProgID("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);
}

需要 管理员权限 且 引用javascript 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/China编程5)

以上就是在C#中调用Windows防火墙界面的常见方式的详细内容,更多关于C#调用Windows防火墙界面的资料请关注China编程(www.chinasem.cn)其它相关文章!

这篇关于在C#中调用Windows防火墙界面的常见方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1156257

相关文章

C#借助Spire.XLS for .NET实现在Excel中添加文档属性

《C#借助Spire.XLSfor.NET实现在Excel中添加文档属性》在日常的数据处理和项目管理中,Excel文档扮演着举足轻重的角色,本文将深入探讨如何在C#中借助强大的第三方库Spire.... 目录为什么需要程序化添加Excel文档属性使用Spire.XLS for .NET库实现文档属性管理Sp

idea设置快捷键风格方式

《idea设置快捷键风格方式》在IntelliJIDEA中设置快捷键风格,打开IDEA,进入设置页面,选择Keymap,从Keymaps下拉列表中选择或复制想要的快捷键风格,点击Apply和OK即可使... 目录idea设www.chinasem.cn置快捷键风格按照以下步骤进行总结idea设置快捷键pyth

Linux镜像文件制作方式

《Linux镜像文件制作方式》本文介绍了Linux镜像文件制作的过程,包括确定磁盘空间布局、制作空白镜像文件、分区与格式化、复制引导分区和其他分区... 目录1.确定磁盘空间布局2.制作空白镜像文件3.分区与格式化1) 分区2) 格式化4.复制引导分区5.复制其它分区1) 挂载2) 复制bootfs分区3)

C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解

《C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解》:本文主要介绍C++,C#,Rust,Go,Java,Python,JavaScript性能对比全面... 目录编程语言性能对比、核心优势与最佳使用场景性能对比表格C++C#RustGoJavapythonjav

SpringBoot返回文件让前端下载的几种方式

《SpringBoot返回文件让前端下载的几种方式》文章介绍了开发中文件下载的两种常见解决方案,并详细描述了通过后端进行下载的原理和步骤,包括一次性读取到内存和分块写入响应输出流两种方法,此外,还提供... 目录01 背景02 一次性读取到内存,通过响应输出流输出到前端02 将文件流通过循环写入到响应输出流

C# 预处理指令(# 指令)的具体使用

《C#预处理指令(#指令)的具体使用》本文主要介绍了C#预处理指令(#指令)的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1、预处理指令的本质2、条件编译指令2.1 #define 和 #undef2.2 #if, #el

C#实现将Excel工作表拆分为多个窗格

《C#实现将Excel工作表拆分为多个窗格》在日常工作中,我们经常需要处理包含大量数据的Excel文件,本文将深入探讨如何在C#中利用强大的Spire.XLSfor.NET自动化实现Excel工作表的... 目录为什么需要拆分 Excel 窗格借助 Spire.XLS for .NET 实现冻结窗格(Fro

C# Semaphore与SemaphoreSlim区别小结

《C#Semaphore与SemaphoreSlim区别小结》本文主要介绍了C#Semaphore与SemaphoreSlim区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录一、核心区别概览二、详细对比说明1.跨进程支持2.异步支持(关键区别!)3.性能差异4.API 差

C# List.Sort四种重载总结

《C#List.Sort四种重载总结》本文详细分析了C#中List.Sort()方法的四种重载形式及其实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录1. Sort方法的四种重载2. 具体使用- List.Sort();- IComparable

java敏感词过滤的实现方式

《java敏感词过滤的实现方式》文章描述了如何搭建敏感词过滤系统来防御用户生成内容中的违规、广告或恶意言论,包括引入依赖、定义敏感词类、非敏感词类、替换词类和工具类等步骤,并指出资源文件应放在src/... 目录1.引入依赖2.定义自定义敏感词类3.定义自定义非敏感类4.定义自定义替换词类5.最后定义工具类