WPF 应用程序不向防火墙请求许可
Posted
技术标签:
【中文标题】WPF 应用程序不向防火墙请求许可【英文标题】:WPF application does not ask Firewall for permission 【发布时间】:2015-11-21 19:10:23 【问题描述】:我正在制作一个 WPF 应用程序,我使用 WebCLient 从网络服务器下载文件。当我在调试模式下启动我的应用程序时,它会向防火墙请求许可,然后我允许它,这使我的应用程序可以正常工作。
但在发布模式下,它不会提示我使用防火墙权限,这会导致我的应用在下载文件时崩溃。我以发布模式部署我的应用程序。当我运行部署后得到的.exe
文件时,它仍然不会请求防火墙权限,这会使我的应用程序无法正常工作。
有没有办法在发布模式下以编程方式触发防火墙提示?
【问题讨论】:
这可能是相关的:superuser.com/questions/115667/… 我想知道为什么您会收到防火墙提示 - WebClient 使用默认情况下不被阻止的传出连接,所以我怀疑您的应用程序由于其他原因而崩溃,错误是什么? 【参考方案1】:必读:我已经搜索了一种使用 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 替换为您的批处理目录(此处使用 '/' 而不是 '\')
玩得开心! 如果您有任何疑问或遇到问题,请发表评论。
【讨论】:
我也在努力解决这个问题。我不明白您的解决方案是如何解决问题的。我手动添加了一条规则,但没有解决问题以上是关于WPF 应用程序不向防火墙请求许可的主要内容,如果未能解决你的问题,请参考以下文章