WPF应用程序不要求防火墙获得许可

时间:2015-08-27 11:57:21

标签: c# wpf release firewall windows-firewall

我正在创建一个WPF应用程序,我使用WebCLient从Web服务器下载文件。当我在调试模式下启动我的应用程序时,它要求防火墙获得权限,然后我允许它,这使我的应用程序正常工作。

但在发布模式下,它不会提示我使用防火墙权限,这会导致我的应用在下载文件时崩溃。我在发布模式下部署我的应用程序。当我运行部署后获得的.exe文件时,它仍然不会要求防火墙权限,这会使我的应用程序无法正常工作。

有没有办法在发布模式下以编程方式触发防火墙提示?

1 个答案:

答案 0 :(得分:0)

必须阅读:我已经搜索了一种使用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 表示因为您正在下载而设置的方向。 两个方向 键入:

 @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 替换为您的批处理目录(使用' /'不是' \'就在这里)

玩得开心!  如果您有疑问或者您遇到问题,请发表评论。