必读:我已经搜索了一种使用 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 替换为您的 Release 构建目录(例如: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 替换为您的批处理目录(此处使用 '/' 而不是 '\')
玩得开心!
如果您有任何疑问或遇到问题,请发表评论。