Loc*_* Le 5 c# wpf firewall release windows-firewall
我正在创建一个WPF应用程序,我使用WebCLient从Web服务器下载文件.当我在调试模式下启动我的应用程序时,它要求防火墙获得权限,然后我允许它,这使我的应用程序正常工作.
但在发布模式下,它不会提示我使用防火墙权限,这会导致我的应用程序在下载文件时崩溃.我在发布模式下部署我的应用程序.当我运行.exe部署后获得的文件时,它仍然不会要求防火墙权限,这会使我的应用程序无法正常工作.
有没有办法在发布模式下以编程方式触发防火墙提示?
必读:我已经搜索了一种使用 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
Run Code Online (Sandbox Code Playgroud)
2) 将 SomethingSpecial 替换为您想要的任何内容。它只是一个名称,如果您替换它,请在所有地方替换它(您可以保持 SomethingSpecial 不变)
3) 将 DIRECTORY 替换为您的发布构建目录(例如:)C:\program files\something.exedir
表示方向设置为 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
Run Code Online (Sandbox Code Playgroud)
保存为.bat格式并记住路径
现在有趣的部分..
在您的应用程序中使用下面的代码..如果您的程序不以管理员身份运行并且您不希望用户继续授予权限,请找到一种仅运行该进程一次的方法...也许保存到文件、布尔值或字符串,然后在程序启动时检查一次,这样程序就不会每次都运行bat进程。
ProcessStartInfo bat = new ProcessStartInfo();
bat.Verb = "runas";
bat.FileName = "BatchDirectory";
bat.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(bat);
Run Code Online (Sandbox Code Playgroud)
将 BatchDirectory 替换为您的批处理目录(此处使用“/”而不是“\”)
玩得开心!如果您有疑问或遇到问题,请发表评论。
| 归档时间: |
|
| 查看次数: |
719 次 |
| 最近记录: |