簡體   English   中英

c#防火牆規則多配置文件

[英]c# Firewall rule multi profile

如何在 c# 中為所有人設置防火牆規則? 我嘗試只設置域或私有,效果很好。 但是對於所有代碼,它不起作用。 我使用來自 GitHub 的代碼,這個解決方案https://github.com/falahati/WindowsFirewallHelper

部分代碼:

  var rule = FirewallManager.Instance.CreateApplicationRule(FirewallManager.Instance.GetProfile(FirewallProfiles.All).Type, @"MyApp Rule", FirewallAction.Allow, @"C:\MyApp.exe");
  rule.Direction = FirewallDirection.Inbound;
  FirewallManager.Instance.Rules.Add(rule);

  [Flags]
  public enum FirewallProfiles
  {
     Domain = NET_FW_PROFILE_TYPE2.NET_FW_PROFILE2_DOMAIN,
     Private = NET_FW_PROFILE_TYPE2.NET_FW_PROFILE2_PRIVATE,
     Public = NET_FW_PROFILE_TYPE2.NET_FW_PROFILE2_PUBLIC,
     All=NET_FW_PROFILE_TYPE2.NET_FW_PROFILE2_ALL
  }

我捕獲exception =FirewallLegacyNotSupportedException

您無法獲得所有配置文件的配置文件。 Windows 高級安全防火牆 (Vista+) 中沒有All配置文件。 該庫只是 Windows 防火牆 COM API 的包裝器,您需要了解有關底層系統的基本信息才能使用它。 其次,通過傳遞FirewallProfiles然后使用Type屬性來獲取配置文件本質上等同於將FirewallProfiles直接傳遞給方法。

      var rule = FirewallManager.Instance.CreateApplicationRule(
        FirewallProfiles.Private | FirewallProfiles.Domain | FirewallProfiles.Public, 
        @"MyApp Rule", 
        FirewallAction.Allow, 
        @"C:\MyApp.exe"
      );
      rule.Direction = FirewallDirection.Inbound;
      FirewallManager.Instance.Rules.Add(rule);

請通過 Github 問題跟蹤器提出此類問題。 https://github.com/falahati/WindowsFirewallHelper/issues

建議:嘗試將其添加到您的 app.config/web.config:

<configuration>
   <runtime>
      <NetFx40_LegacySecurityPolicy enabled="true"/>
   </runtime>
</configuration>

具體來說:

MSDN:兼容性:使用 CAS 策略遺留選項

配置元素允許您指定進程或庫使用舊 CAS 策略。 當您啟用此元素時,策略和證據重載將像它們在框架的先前版本中那樣工作。

注意:CAS 策略行為是基於運行時版本指定的,因此修改一個運行時版本的 CAS 策略不會影響另一個版本的 CAS 策略。

替代建議:

查看INetFwOpenPorts API

建議#3:

看看這個 C# 示例

請發回這些是否適合您。 我在交叉我的手指;)!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM