在安装过程中创build防火墙规则:netsh或WindowsFirewall API?

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

  1. 运行netsh命令
  2. Programmaticaly与防火墙API

关于netsh-logging了两种types的命令 –

哪个操作系统支持哪个? 我想我可以运行,只是为了确定(我想支持XP,Vista和WIN7)

关于防火墙API,使用它有什么好处? 表面上看起来有点复杂(我需要找出我正在运行的操作系统,因为我需要连接到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

请记住,这些是用XP SP2的旧COM对象编写的; Microsoft建议您使用: INetFwPolicy2 。 它将工作,但Vista,7,和8.这是一些文档,包括使用旧代码的几个例子的文章; 不知道这是否有帮助。 希望是的。

Vista,7,8

XP Service Pack 2:

博客与这些例子的细节; 和解释。