c# - 安装期间创建防火墙规则 : netsh or WindowsFirewall API?

标签 c# windows installation windows-firewall

我在这里为我们的程序构建一个安装程序,我想在安装时添加防火墙规则。 我研究了一下,发现了两种方法:

  1. 运行 netsh 命令
  2. 以编程方式使用防火墙 API

关于 netsh- 记录了 2 种类型的命令-

  • "netsh firewall add allowedprogram C:\MyApp\MyApp.exe "My 应用程序“启用”,

    和-

  • "netsh advfirewall 防火墙添加规则名称="我的应用程序"dir=in action=allow program="C:\MyApp\MyApp.exe"enable=yes"

..哪个操作系统支持哪个?我想我可以同时运行两者以确保 (我想支持xp,vista和win7)

关于 firewallAPI - 使用它有什么好处吗?表面上看起来有点复杂(对于初学者,我需要找出我正在运行的操作系统,因为我需要连接到 vista 中的不同 dll)。

最佳答案

如果您只是检查是否启用了防火墙;你可以这样做:

NetFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", false);
INetFwMgr Manage = (INetFwMgr)Activator.CreateInstance(NetFwMgrType);
bool Firewallenabled = Manage.LocalPolicy.CurrentProfile.FirewallEnabled;

然后您就可以将您的应用添加到已授权的应用中;

INetFwAuthorizedApplications applications;
INetFwAuthorizedApplication application;

// Input Application Name
application.Name = “Internet Explorer”;

// Locate .exe
 application.ProcessImageFileName = "C:\\Program Files\\Internet Explorer\\iexplore.exe"

// Enable
application.Enabled =  true; 

// Authorize the Application
Type NetFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", false); 
         INetFwMgr Manage = (INetFwMgr)Activator.CreateInstance(NetFwMgrType); 
         applications = (INetFwAuthorizedApplications)mgr.LocalPolicy.CurrentProfile.AuthorizedApplications;
applications.Add(application);

您需要访问这些 COM 对象:

  • NetFwTypeLib
  • HNetCfg.FwMgr

请记住,这些是用旧的 COM 对象为 XP SP2 编写的; Microsoft 建议您使用的位置:INetFwPolicy2。它适用于 Vista、7 和 8。这里有一些文档,包括文章和几个使用旧代码的示例;不知道这是否有帮助。希望如此。

Vista, 7, 8

XP Service Pack 2:

Blog with those examples in detail; and explanations.

关于c# - 安装期间创建防火墙规则 : netsh or WindowsFirewall API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10699187/

相关文章:

c# - 只有通用参数时调用静态成员

c# - 无法使用 Datetime.ParseExact 转换日期时间字符串

windows - 有没有办法以编程方式将焦点集中到 Windows 中的应用程序?

.net - 适用于 .NET 的 Google API(第 2 版)是否可再发行?

visual-studio - 在 Web 安装项目期间/之后修改 Web.config

c# - UWP AudioGraph 设置不适用于所有设备,HRESULT : 0x88960001 thrown on AddOutgoingConnection

c# - 即使使用 [BindProperty(SupportsGet = true)],Razor 页面也不会在 POST 上绑定(bind)属性

Windows Batch,调用另一个批处理时的循环和文件属性

ruby - 我可以在 Windows 中将 Sass 与批处理脚本一起使用吗

c# - 在 c#\.NET 中使用自定义操作的 wix 3.5 静默安装程序