当前位置: 代码网 > it编程>编程语言>Asp.net > 在C#中调用Windows防火墙界面的常见方式

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

2025年11月23日 Asp.net 我要评论
引言在c#中调用windows防火墙界面(基础设置或高级安全设置),可以使用进程启动(process.start)或win32 api来实现。以下是几种常见方式:1. 直接启动防火墙界面(1) 打开基

引言

在 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防火墙界面的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com