必读:我已经搜索了使用C#请求防火墙访问的方法,但没有找到任何相关或安全的信息。该批处理文件是100%干净的,不会被检测为任何类型的恶意软件。(我无法找到在C#中执行此操作的方法,这不是离题!)
我不太清楚如何请求添加允许规则,但我知道如何添加规则:
仅限入站:
1)启动记事本并键入:
@echo off
setlocal
set RULENAME="SomethingSpecial"
netsh advfirewall firewall show rule name=%RULENAME% >nul
if not ERRORLEVEL 1 ( goto :EOF) else (
netsh advfirewall firewall add rule name="SomethingSpecial" dir=in action=allow program="DIRECTORY" enable=yes)
goto :EOF
2) 将SomethingSpecial替换为你想要的任何内容。 它只是一个名称,如果你替换它,请在所有地方进行替换(可以保留SomethingSpecial不变)
3) 将DIRECTORY替换为您的发布构建目录(例如:C:\program files\something.exe
)
dir表示设置为in方向,因为您正在下载。
对于双向,请键入:
@echo off
setlocal
set RULENAME="SomethingSpecial"
netsh advfirewall firewall show rule name=%RULENAME% >nul
if not ERRORLEVEL 1 ( goto :EOF) else (
netsh advfirewall firewall add rule name="SomethingSpecial" dir=in action=allow program="DIRECTORY" enable=yes
netsh advfirewall firewall add rule name="SomethingSpecial" dir=out action=allow program="DIRECTORY" enable=yes)
goto :EOF
保存为.bat格式并记住路径
现在是有趣的部分...
在您的应用程序中使用以下代码.. 如果您的程序不以管理员身份运行,并且您不希望用户不断授予权限,请找到一种方法仅运行该进程一次...也许保存到文件、布尔值或字符串,并在程序启动时检查它,以便程序不会每次都运行.bat进程。
ProcessStartInfo bat = new ProcessStartInfo();
bat.Verb = "runas";
bat.FileName = "BatchDirectory";
bat.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(bat);
将BatchDirectory替换为您的批处理目录(仅在此处使用“/”而不是“\”)
玩得开心!如果您有问题或遇到问题,请留言评论。