Я в настоящее время программирую Windows-firewallmanager для компании.
Проблема в том, что я могу удалить только запись по имени, а не объектом INetFwRule или чем-то еще.
Есть записи, имеющие одно и то же имя два раза, где один для TCP, а другой для UDP, и мы можем удалить только один из них.
Я мог бы удалить оба и создать один из них позже, но я не хотел бы использовать это обходное решение.
У кого-нибудь есть легкое решение?C# Firewall, удалить конкретную запись
ответ
Вы можете удалить правила по имени только с помощью интерфейса INetFwRules
, который, кажется, плохо разработан API, поскольку разные правила могут иметь одно и то же имя. Обходной путь состоит в том, чтобы отфильтровать правила не только по имени, но и другими свойствами, которые определяют правило, которое вы хотите удалить. Когда вы найдете правило для удаления, вы можете переименовать правило в уникальное имя, используя интерфейс INetFwRule
.
Вы можете удалить правило, используя это уникальное временное имя.
Я тоже об этом думал, но это не правильное программирование. Однако все будет хорошо. – besplash
@besplash: Я считаю, что это ваш единственный вариант - правильное или правильное программирование. По-моему, интерфейс автоматизации плохо разработан, но вы ничего не можете с этим поделать. –
Я использовал этот метод сейчас. – besplash
public static void RemoveFirewallRules(string RuleName = "BreakermindCom")
{
try
{
Type tNetFwPolicy2 = Type.GetTypeFromProgID("HNetCfg.FwPolicy2");
INetFwPolicy2 fwPolicy2 = (INetFwPolicy2)Activator.CreateInstance(tNetFwPolicy2);
var currentProfiles = fwPolicy2.CurrentProfileTypes;
// Lista rules
// List<INetFwRule> RuleList = new List<INetFwRule>();
foreach (INetFwRule rule in fwPolicy2.Rules)
{
// Add rule to list
// RuleList.Add(rule);
// Console.WriteLine(rule.Name);
if (rule.Name.IndexOf(RuleName) != -1)
{
// Now add the rule
INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
firewallPolicy.Rules.Remove(rule.Name);
Console.WriteLine(rule.Name + " has been deleted from Firewall Policy");
}
}
}
catch (Exception r)
{
Console.WriteLine("Error delete rule from firewall");
}}
Посмотрите на эту
не решает проблему дубликатов имен в отношении вопроса – BerndK
Вы можете фильтровать по имени + протоколу? – Marco
Да, я могу перебирать все правила и фильтровать во время этого – besplash