c# 通過程式碼開啟或關閉防火牆
阿新 • • 發佈:2020-10-29
通過程式碼操作防火牆的方式有兩種:一是程式碼操作修改登錄檔啟用或關閉防火牆;二是直接操作防火牆物件來啟用或關閉防火牆。不論哪一種方式,都需要使用管理員許可權,所以操作前需要判斷程式是否具有管理員許可權。
1、判斷程式是否擁有管理員許可權
需要引用名稱空間:System.Security.Principal
/// <summary> /// 判斷程式是否擁有管理員許可權 /// </summary> /// <returns>true:是管理員;false:不是管理員</returns> public static bool IsAdministrator() { WindowsIdentity current = WindowsIdentity.GetCurrent(); WindowsPrincipal windowsPrincipal = new WindowsPrincipal(current); return windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator); }
2、登錄檔修改防火牆
需要引用名稱空間:Microsoft.Win32
/// <summary> /// 通過登錄檔操作防火牆 /// </summary> /// <param name="domainState">域網路防火牆(禁用:0;啟用(預設):1)</param> /// <param name="publicState">公共網路防火牆(禁用:0;啟用(預設):1)</param> /// <param name="standardState">專用網路防火牆(禁用:0;啟用(預設):1)</param> /// <returns></returns> public static bool FirewallOperateByRegistryKey(int domainState=1,int publicState = 1,int standardState = 1) { RegistryKey key = Registry.LocalMachine; try { string path = "HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Services\\SharedAccess\\Defaults\\FirewallPolicy"; RegistryKey firewall = key.OpenSubKey(path,true); RegistryKey domainProfile = firewall.OpenSubKey("DomainProfile",true); RegistryKey publicProfile = firewall.OpenSubKey("PublicProfile",true); RegistryKey standardProfile = firewall.OpenSubKey("StandardProfile",true); domainProfile.SetValue("EnableFirewall",domainState,RegistryValueKind.DWord); publicProfile.SetValue("EnableFirewall",publicState,RegistryValueKind.DWord); standardProfile.SetValue("EnableFirewall",standardState,RegistryValueKind.DWord); } catch (Exception e) { string error = $"登錄檔修改出錯:{e.Message}"; throw new Exception(error); } return true; }
3、直接操作防火牆物件
需要在專案引用中新增對NetFwTypeLib的引用,並引用名稱空間NetFwTypeLib
/// <summary> /// 通過物件防火牆操作 /// </summary> /// <param name="isOpenDomain">域網路防火牆(禁用:false;啟用(預設):true)</param> /// <param name="isOpenPublicState">公共網路防火牆(禁用:false;啟用(預設):true)</param> /// <param name="isOpenStandard">專用網路防火牆(禁用: false;啟用(預設):true)</param> /// <returns></returns> public static bool FirewallOperateByObject(bool isOpenDomain = true,bool isOpenPublicState = true,bool isOpenStandard = true) { try { INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2")); // 啟用<高階安全Windows防火牆> - 專有配置檔案的防火牆 firewallPolicy.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE,isOpenStandard); // 啟用<高階安全Windows防火牆> - 公用配置檔案的防火牆 firewallPolicy.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC,isOpenPublicState); // 啟用<高階安全Windows防火牆> - 域配置檔案的防火牆 firewallPolicy.set_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_DOMAIN,isOpenDomain); } catch (Exception e) { string error = $"防火牆修改出錯:{e.Message}"; throw new Exception(error); } return true; }
以上就是c# 通過程式碼開啟或關閉防火牆的詳細內容,更多關於c# 防火牆的資料請關注我們其它相關文章!