4

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

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

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

  • "netsh firewall add allowedprogram C:\MyApp\MyApp.exe "My Application" ENABLE",

    和-

  • "netsh advfirewall 防火墙添加规则名称="My Application" dir=in action=allow program="C:\MyApp\MyApp.exe" enable=yes"

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

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

4

1 回答 1

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。这是一些文档,包括文章以及使用旧代码的几个示例;不知道这是否有帮助。希望确实如此。

维斯塔, 7, 8

XP 服务包 2:

详细介绍这些示例的博客;和解释。

于 2012-11-20T00:42:49.400 回答