2015-04-27 81 views
0

我目前正在爲一家公司編程一個windows-firewallmanager。
問題是,我只能通過名稱而不是INetFwRule對象或其他東西刪除條目。
有些條目的名稱有兩次,一次是TCP,另一次是UDP,我們可能只想刪除其中的一個。
我可以刪除兩個,然後再次創建其中一個,但我不想使用該解決方法。
有沒有人有一個簡單的解決方案呢?C#防火牆,刪除特定條目

+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