通过编程管理windows 防火墙

管理Windows防火墙
本文介绍了一个用于管理Windows防火墙允许程序的C#类。该类提供了设置和删除防火墙允许程序的功能,并支持指定程序路径、名称、模式、作用域及自定义地址。
最近项目中需要通过程序自动设置windows 防火墙,查了一下资料,可以通过命令行netsh firewall来实现。封装了一个类来实现对运行放开的程序(Allowed program)进行管理。管理其他内容比如放开端口等方法是类似的。

  程序中用到一个公共类 RunProcess,这个类可从另一篇文章 《一个C#写的调用外部进程类》 获得

 


 namespace WinFirewall
  {
  
   public enum TScope
   {
   ALL,
   SUBNET,
   CUSTOM,
   }
  
   public enum TMode
   {
   ENABLE,
   DISABLE,
   }
  
   /**//// 
   /// Manage the allowed program with the Windows Firewall.
   /// 
   public class AllowedProgram
   {
   Set AllowedProgram Help#region Set AllowedProgram Help
   /**//*
   set allowedprogram
  
   [ program = ] path
   [ [ name = ] name
   [ mode = ] ENABLE|DISABLE
   [ scope = ] ALL|SUBNET|CUSTOM
   [ addresses = ] addresses
   [ profile = ] CURRENT|DOMAIN|STANDARD|ALL ]
  
   Sets firewall allowed program configuration.
  
   Parameters:
  
   program - Program path and file name.
  
   name - Program name (optional).
  
   mode - Program mode (optional).
   ENABLE - Allow through firewall (default).
   DISABLE - Do not allow through firewall.
  
   scope - Program scope (optional).
   ALL - Allow all traffic through firewall (default).
   SUBNET - Allow only local network (subnet) traffic through firewall.
   CUSTOM - Allow only specified traffic through firewall.
  
   addresses - Custom scope addresses (optional).
  
   profile - Configuration profile (optional).
   CURRENT - Current profile (default).
   DOMAIN - Domain profile.
   STANDARD - Standard profile.
   ALL - All profiles.
  
   Remarks: 'scope' must be 'CUSTOM' to specify 'addresses'.
  
   Examples:
  
   set allowedprogram C:\MyApp\MyApp.exe MyApp ENABLE
  
   set allowedprogram C:\MyApp\MyApp.exe MyApp DISABLE
  
   set allowedprogram C:\MyApp\MyApp.exe MyApp ENABLE CUSTOM
  
   157.60.0.1,172.16.0.0/16,10.0.0.0/255.0.0.0,LocalSubnet
   set allowedprogram program = C:\MyApp\MyApp.exe name = MyApp mode = ENABLE
  
   set allowedprogram program = C:\MyApp\MyApp.exe name = MyApp mode = DISABLE
   set allowedprogram program = C:\MyApp\MyApp.exe name = MyApp mode = ENABLE
  
   scope = CUSTOM addresses =
   157.60.0.1,172.16.0.0/16,10.0.0.0/255.0.0.0,LocalSubnet
   */
   #endregion
  
   private field#region private field
   private String m_Program;
   private String m_Name;
   private TScope m_Scope = TScope.ALL;
   private TMode m_Mode = TMode.ENABLE;
   private String m_Address;
   #endregion
  
   public property#region public property
   /**//// 
   /// Program path and file name.
   /// 
   public String Program
   {
   get
   {
   return m_Program;
   }
  
   set
   {
   m_Program = value;
   }
   }
  
   /**//// 
   /// Program name (optional).
   /// 
   public String Name
   {
   get
   {
   return m_Name;
   }
  
   set
   {
   m_Name = value;
   }
   }
  
   /**//// 
   /// Program scope (optional).
   /// ALL - Allow all traffic through firewall (default).
   /// SUBNET - Allow only local network (subnet) traffic through firewall.
   /// CUSTOM - Allow only specified traffic through firewall. /// 
   public TScope Scope
   {
   get
   {
   return m_Scope;
   }
  
   set
   {
   m_Scope = value;
   }
   }
  
   /**//// 
   /// Program mode (optional).
   /// ENABLE - Allow through firewall (default).
   /// DISABLE - Do not allow through firewall
   /// 
   public TMode Mode
   {
   get
   {
   return m_Mode;
   }
  
   set
   {
   m_Mode = value;
   }
   }
  
   /**//// 
   /// Custom scope addresses (optional).
   /// 
   /// 
   /// 157.60.0.1,172.16.0.0/16,10.0.0.0/255.0.0.0
   /// 
   public String Address
   {
   get
   {
   return m_Address;
   }
  
   set
   {
   m_Address = value;
   }
   }
  
   #endregion
  
   public method#region public method
  
   /**//// 
   /// Set allowed program
   /// 
   public void Set()
   {
   Debug.Assert(Program != null);
  
   if (Name == null)
   {
   Name = System.IO.Path.GetFileNameWithoutExtension(Program);
   }
  
   if (Scope == TScope.CUSTOM)
   {
   Debug.Assert(Address != null);
   }
  
   RunProcess runCmd = new RunProcess();
   String command;
  
   command = String.Format("firewall set allowedprogram {0} {1} {2} {3}",
   Program, Name, Mode.ToString(), Scope.ToString());
  
   if (Scope == TScope.CUSTOM)
   {
   command += " " + Address;
   }
  
   runCmd.Run("netsh", command);
  
   if (runCmd.Error != null && runCmd.Error != "")
   {
   throw new Exception(runCmd.Error);
   }
  
   if (!runCmd.Output.ToLower().Contains("ok."))
   {
   throw new Exception(runCmd.Output);
   }
   }
  
   /**//// 
   /// Delete allowed program
   /// 
   public void Delete()
   {
   Debug.Assert(Program != null);
  
   RunProcess runCmd = new RunProcess();
  
   String command = String.Format("firewall delete allowedprogram {0}",
   Program);
  
   runCmd.Run("netsh", command);
  
   if (runCmd.Error != null && runCmd.Error != "")
   {
   throw new Exception(runCmd.Error);
   }
  
   if (!runCmd.Output.ToLower().Contains("ok."))
   {
   throw new Exception(runCmd.Output);
   }
   }
  
   #endregion
   }
  }
  
  调用的相关例程
   private void buttonSetAllowProgram_Click(object sender, EventArgs e)
   {
   try
   {
   AllowedProgram allowedProgram = new AllowedProgram();
   allowedProgram.Program = textBoxProgramFilePath.Text.Trim();
  
   if (checkBoxEnable.Checked)
   {
   allowedProgram.Mode = TMode.ENABLE;
   }
   else
   {
   allowedProgram.Mode = TMode.DISABLE;
   }
  
   allowedProgram.Scope = (TScope)comboBoxScope.SelectedItem;
  
   allowedProgram.Address = textBoxAddress.Text.Trim();
  
   allowedProgram.Set();
  
   MessageBox.Show("OK", "Information", MessageBoxButtons.OK);
   }
   catch (Exception e1)
   {
   MessageBox.Show(e1.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
   }
   }
  
   private void buttonDelAllowProgram_Click(object sender, EventArgs e)
   {
   try
   {
   AllowedProgram allowedProgram = new AllowedProgram();
   allowedProgram.Program = textBoxProgramFilePath.Text.Trim();
   allowedProgram.Delete();
  
   MessageBox.Show("OK", "Information", MessageBoxButtons.OK);
   }
   catch (Exception e1)
   {
   MessageBox.Show(e1.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
   }
   }

Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值