c# 通過代碼開啟或關(guān)閉防火墻
通過代碼操作防火墻的方式有兩種:一是代碼操作修改注冊表啟用或關(guān)閉防火墻;二是直接操作防火墻對象來啟用或關(guān)閉防火墻。不論哪一種方式,都需要使用管理員權(quán)限,所以操作前需要判斷程序是否具有管理員權(quán)限。
1、判斷程序是否擁有管理員權(quán)限
需要引用命名空間:System.Security.Principal
/// <summary> /// 判斷程序是否擁有管理員權(quán)限 /// </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">域網(wǎng)絡(luò)防火墻(禁用:0;啟用(默認(rèn)):1)</param> /// <param name="publicState">公共網(wǎng)絡(luò)防火墻(禁用:0;啟用(默認(rèn)):1)</param> /// <param name="standardState">專用網(wǎng)絡(luò)防火墻(禁用:0;啟用(默認(rèn)):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">域網(wǎng)絡(luò)防火墻(禁用:false;啟用(默認(rèn)):true)</param> /// <param name="isOpenPublicState">公共網(wǎng)絡(luò)防火墻(禁用:false;啟用(默認(rèn)):true)</param> /// <param name="isOpenStandard">專用網(wǎng)絡(luò)防火墻(禁用: false;啟用(默認(rèn)):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# 通過代碼開啟或關(guān)閉防火墻的詳細(xì)內(nèi)容,更多關(guān)于c# 防火墻的資料請關(guān)注腳本之家其它相關(guān)文章!
- c# 防火墻添加/刪除 特定端口的示例
- C#用遞歸算法實現(xiàn):一列數(shù)的規(guī)則如下: 1、1、2、3、5、8、13、21、34,求第30位數(shù)是多少
- C#創(chuàng)建不規(guī)則窗體的4種方式詳解
- C#常用的命名規(guī)則匯總
- c#圖片處理之圖片裁剪成不規(guī)則圖形
- c#棧變化規(guī)則圖解示例(棧的生長與消亡)
- 正則表達(dá)式語法規(guī)則及在Javascript和C#中的使用方法
- c# 給button添加不規(guī)則的圖片以及用pictureBox替代button響應(yīng)點擊事件的方法
- C# 命名規(guī)則(挺不錯的)
- C# 設(shè)置防火墻的創(chuàng)建規(guī)則
相關(guān)文章
C# StreamReader類實現(xiàn)讀取文件的方法
這篇文章主要介紹了C# StreamReader類實現(xiàn)讀取文件的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01C#函數(shù)式程序設(shè)計之用閉包封裝數(shù)據(jù)的實現(xiàn)代碼
如果一個程序設(shè)計語言能夠用高階函數(shù)解決問題,則意味著數(shù)據(jù)作用域問題已十分突出。當(dāng)函數(shù)可以當(dāng)成參數(shù)和返回值在函數(shù)之間進(jìn)行傳遞時,編譯器利用閉包擴(kuò)展變量的作用域,以保證隨時能得到所需要的數(shù)據(jù)2014-03-03基于c#圖像灰度化、灰度反轉(zhuǎn)、二值化的實現(xiàn)方法詳解
本篇文章是對c#圖像灰度化、灰度反轉(zhuǎn)、二值化的實現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05在WinForm應(yīng)用程序中快速實現(xiàn)多語言的處理的方法
在國際化環(huán)境下,越來越多的程序需要做多語言版本,這篇文章主要介紹了在WinForm應(yīng)用程序中快速實現(xiàn)多語言的處理的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2018-07-07