我需要添加一个防火墙规则与我的WPF程序。在Powershell中,我有一个可行的解决方案:
New-NetFirewallRule -DisplayName $Description -Direction Inbound -Action Allow -Profile Any -EdgeTraversalPolicy Allow -Protocol TCP -LocalPort 80, 443.
相当简单。
在C#中,什么是等价的?内什?我找到了这个https://stackoverflow.com/a/29652140/10194386
System.Diagnostics.Process.Start("netsh.exe", "whatever you would need to write as parameters");
有没有更好的解决办法?
非常感谢!
编辑:
我试过@Cpt.Whale stackoverflow.com/a/34018032/7411885的链接
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”。
我的错误在哪里?
发布于 2022-06-25 15:02:18
终于成功了!
确保您的WPF项目是NetFwTypeLib
将
在这里,我的代码(感谢https://stackoverflow.com/a/34018032/10194386)
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);
https://stackoverflow.com/questions/72686996
复制相似问题