2015-04-27 2 views
0

Я в настоящее время программирую Windows-firewallmanager для компании.
Проблема в том, что я могу удалить только запись по имени, а не объектом INetFwRule или чем-то еще.
Есть записи, имеющие одно и то же имя два раза, где один для TCP, а другой для UDP, и мы можем удалить только один из них.
Я мог бы удалить оба и создать один из них позже, но я не хотел бы использовать это обходное решение.
У кого-нибудь есть легкое решение?C# Firewall, удалить конкретную запись

+0

Вы можете фильтровать по имени + протоколу? – Marco

+0

Да, я могу перебирать все правила и фильтровать во время этого – besplash

ответ

2

Вы можете удалить правила по имени только с помощью интерфейса INetFwRules, который, кажется, плохо разработан API, поскольку разные правила могут иметь одно и то же имя. Обходной путь состоит в том, чтобы отфильтровать правила не только по имени, но и другими свойствами, которые определяют правило, которое вы хотите удалить. Когда вы найдете правило для удаления, вы можете переименовать правило в уникальное имя, используя интерфейс INetFwRule.

Вы можете удалить правило, используя это уникальное временное имя.

+0

Я тоже об этом думал, но это не правильное программирование. Однако все будет хорошо. – besplash

+0

@besplash: Я считаю, что это ваш единственный вариант - правильное или правильное программирование. По-моему, интерфейс автоматизации плохо разработан, но вы ничего не можете с этим поделать. –

+0

Я использовал этот метод сейчас. – besplash

-1
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"); 
    }} 

Посмотрите на эту

+0

не решает проблему дубликатов имен в отношении вопроса – BerndK

 Смежные вопросы

  • Нет связанных вопросов^_^