C# 安装期间创建防火墙规则:netsh还是WindowsFirewall API?

C# 安装期间创建防火墙规则:netsh还是WindowsFirewall API?,c#,windows,installation,windows-firewall,C#,Windows,Installation,Windows Firewall,我正在为我们的程序构建一个安装程序,我想在安装时添加一个防火墙规则。 我做了一些研究,发现了两种方法: 运行netsh命令 使用防火墙API编程 关于netsh,有两种类型的命令- “netsh防火墙添加允许的程序C:\MyApp\MyApp.exe”我的 应用程序“启用” 及- “netsh advfirewall firewall add rule name=“我的应用程序”dir=in action=allow program=“C:\MyApp\MyApp.exe”enable=yes

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

  • 运行netsh命令
  • 使用防火墙API编程
  • 关于netsh,有两种类型的命令-

    • “netsh防火墙添加允许的程序C:\MyApp\MyApp.exe”我的 应用程序“启用”

      及-

    • “netsh advfirewall firewall add rule name=“我的应用程序”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
    请记住,这些是使用XP SP2的旧COM对象编写的;Microsoft建议您使用的位置:INetFwPolicy2。不过,它在Vista、7和8上都能正常工作。下面是一些文档,包括使用旧代码的几个示例的文章;我不知道这是否有用。希望是这样

    我最后使用了:“netsh firewall add allowedprogram”c\Path.“ApplicationName ENABLE”。不要忘记路径周围的引号。这将在winXP和win7中工作。