首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >c# WPF版本的Powershell新-网络防火墙规则?

c# WPF版本的Powershell新-网络防火墙规则?
EN

Stack Overflow用户
提问于 2022-06-20 12:28:33
回答 1查看 80关注 0票数 0

我需要添加一个防火墙规则与我的WPF程序。在Powershell中,我有一个可行的解决方案:

代码语言:javascript
运行
复制
New-NetFirewallRule -DisplayName $Description -Direction Inbound -Action Allow -Profile Any -EdgeTraversalPolicy Allow -Protocol TCP -LocalPort 80, 443.

相当简单。

在C#中,什么是等价的?内什?我找到了这个https://stackoverflow.com/a/29652140/10194386

代码语言:javascript
运行
复制
System.Diagnostics.Process.Start("netsh.exe", "whatever you would need to write as parameters");

有没有更好的解决办法?

非常感谢!

编辑:

我试过@Cpt.Whale stackoverflow.com/a/34018032/7411885的链接

代码语言:javascript
运行
复制
private void btn_set_FW_Click(object sender, RoutedEventArgs e)
        {
            Type tNetFwPolicy2 = Type.GetTypeFromProgID("HNetCfg.FwPolicy2");
            INetFwPolicy2 fwPolicy2 = (INetFwPolicy2)Activator.CreateInstance(tNetFwPolicy2);
            var currentProfiles = fwPolicy2.CurrentProfileTypes;

            // Let's create a new rule
            INetFwRule2 inboundRule = (INetFwRule2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));
            inboundRule.Enabled = true;
            //Allow through firewall
            inboundRule.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW;
            //Using protocol TCP
            inboundRule.Protocol = 6; // TCP
                                      
            inboundRule.LocalPorts = "81"; //Port 81
            //Name of rule
            inboundRule.Name = "MyRule";
            // ...//
            inboundRule.Profiles = currentProfiles;

            // Now add the rule
            INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
            firewallPolicy.Rules.Add(inboundRule);
        }

但我犯了一些错误:

CS1061 - "INetFwRule2“不包含”协议“的定义。CS1061 - "INetFwRule2“不包含"LocalPorts”的定义。CS1061 - "INetFwRule2“不包含”名称“的定义。CS1061 - "INetFwRule2“不包含"Profiles”的定义。CS5103 -参数"1":不可能将"MyAPP.INetFwRule2“转换为"NetFwTypeLib.INetFwRule”。

我的错误在哪里?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-25 15:02:18

终于成功了!

确保您的WPF项目是NetFwTypeLib

  • add 6.0而不是.NET Framework4.8。使用NetFwTypeLib;

  • 链接到.NET

在这里,我的代码(感谢https://stackoverflow.com/a/34018032/10194386)

代码语言:javascript
运行
复制
Type tNetFwPolicy2 = Type.GetTypeFromProgID("HNetCfg.FwPolicy2");
INetFwPolicy2 fwPolicy2 = (INetFwPolicy2)Activator.CreateInstance(tNetFwPolicy2);
//var currentProfiles = fwPolicy2.CurrentProfileTypes;

// Let's create a new rule
INetFwRule2 inboundRule = (INetFwRule2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));
inboundRule.Name = "My Firewall Rule";
inboundRule.Description = "FirewallRule Example for stack overflow.";
inboundRule.Enabled = true;    
inboundRule.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW;            
inboundRule.Protocol = 6; // TCP
inboundRule.LocalPorts = "42,80-82,"; //Multiple Ports, no Space allowed!
inboundRule.Profiles = (int)NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_ALL;
inboundRule.EdgeTraversal = true;   

// Now add the rule
INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
firewallPolicy.Rules.Add(inboundRule);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72686996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档