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

时间:2012-05-22 09:21:18

标签: c# windows installer windows-firewall

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

  1. 运行netsh命令
  2. 使用防火墙API进行Programmaticaly
  3. 关于netsh-记录了两种类型的命令 -

    • “netsh防火墙添加允许程序C:\ MyApp \ MyApp.exe”我的 申请“ENABLE”,

      和 -

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

    ..哪个操作系统支持哪个?我想我可以运行两个只是为了确定 (我想支持xp,vista和win7)

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

1 个答案:

答案 0 :(得分:1)

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

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:

Blog with those examples in detail; and explanations.