3

可能重复:
以编程方式将应用程序添加到 Windows 防火墙

在我的解决方案中,我有一个 Windows 服务项目和安装程序来安装此服务我如何在安装期间将此服务添加到 Windows 防火墙。

4

1 回答 1

8

假设我们正在使用Visual Studio Installer->Setup Project- 您需要在正在安装的程序集中有这样的安装程序类,然后确保在安装阶段为“主要输出”添加自定义操作。

using System.Collections;
using System.ComponentModel;
using System.Configuration.Install;
using System.IO;
using System.Diagnostics;

namespace YourNamespace
{
    [RunInstaller(true)]
    public class AddFirewallExceptionInstaller : Installer
    {
        protected override void OnAfterInstall(IDictionary savedState)
        {
            base.OnAfterInstall(savedState);

            var path = Path.GetDirectoryName(Context.Parameters["assemblypath"]);
            OpenFirewallForProgram(Path.Combine(path, "YourExe.exe"),
                                   "Your program name for display");
        }

        private static void OpenFirewallForProgram(string exeFileName, string displayName)
        {
            var proc = Process.Start(
                new ProcessStartInfo
                    {
                        FileName = "netsh",
                        Arguments =
                            string.Format(
                                "firewall add allowedprogram program=\"{0}\" name=\"{1}\" profile=\"ALL\"",
                                exeFileName, displayName),
                        WindowStyle = ProcessWindowStyle.Hidden
                    });
            proc.WaitForExit();
        }
    }
}
于 2012-10-31T13:27:56.150 回答