2015-08-27 11 views
5

Ich mache eine WPF-Anwendung, wo ich WebClient verwenden, um Datei von einem Webserver herunterzuladen. Wenn ich meine App im Debug-Modus starte, fragt sie die Firewall nach der Erlaubnis und dann lasse ich zu, dass meine App so funktioniert, wie sie sollte.WPF-Anwendung fragt Firewall nicht nach Berechtigung

Aber im Freigabemodus gibt es keine Firewall-Erlaubnis, die meine App beim Herunterladen einer Datei zum Absturz bringt. Ich stelle meine App im Veröffentlichungsmodus bereit. Wenn ich die Datei .exe starte, bekomme ich nach der Bereitstellung immer noch keine Firewall-Erlaubnis, die meine App falsch arbeiten lässt.

Gibt es eine Möglichkeit, Firewall-Eingabeaufforderung, möglicherweise programmgesteuert, im Freigabemodus auszulösen?

+0

Dies kann relevant sein: http://superuser.com/questions/115667/how-do-i-get-the-windows-7-firewall-to-prompt-me-whether-to-allow-oder- denied-a-new – PaulF

+0

Ich frage mich, warum Sie überhaupt eine Firewall-Eingabeaufforderung erhalten - der WebClient verwendet eine ausgehende Verbindung, die standardmäßig nicht blockiert ist, also vermute ich, dass Ihre Anwendung aus einem anderen Grund abstürzt, was ist der Fehler? – markmnl

Antwort

0

Muss lesen: Ich habe nach einer Möglichkeit gesucht Firewall den Zugriff mit C# verlangen, aber nicht alles, was relevant oder safe..The Partie finden könnte, ist 100% sauber und wird nicht als irgendeine Art von Malware erkannt werden (. ich kann nicht einen Weg, es zu tun in C# finde dies nicht Wegthema)

ich weiß nicht viel über Ihr Interesse an einer Zulassungsregel hinzufügen, aber ich weiß, wie man eine Regel hinzuzufügen:
Nur für eingehende:

1) Starten Sie den Editor und geben Sie ein:

@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) ersetzen SomethingSpecial mit, was Sie wollen. Es ist nur ein Name, und wenn Sie es ersetzen, ersetzen Sie überall (Sie können SomethingSpecial halten, wie es ist)

3) ersetzen DIRECTORY Ihre Freigabe Build-Verzeichnis (zB: C:\program files\something.exe) dir bedeutet Richtung Satz in, weil du herunterlädst. für beide Richtungen Art diese:

@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 

Speichern in .bat-Format und erinnern Pfad

Jetzt zum lustigen Teil ..

In Anwendungen Code unten verwenden .. Wenn Ihr Programm läuft nicht als admin und Sie wollen nicht, dass Benutzer weiterhin Berechtigungen geben einen Weg finden, um den Prozess nur einmal auszuführen ... Vielleicht in eine Datei, boolean oder Zeichenfolge speichern und überprüfen Sie es beim Programmstart einmal, so dass das Programm läuft nicht das Bat-Prozess-Ding ev erytime.

ProcessStartInfo bat = new ProcessStartInfo(); 
    bat.Verb = "runas"; 
    bat.FileName = "BatchDirectory"; 
    bat.WindowStyle = ProcessWindowStyle.Hidden; 
    Process.Start(bat); 

ersetzen BatchDirectory mit Batch-Verzeichnis (verwenden '/' nicht '\' hier nur)

Viel Spaß! Kommentar, wenn Sie eine Frage haben oder ein Problem haben.

+0

Ich kämpfe auch mit diesem Thema. Ich verstehe nicht, wie Ihre Lösung das Problem gelöst hat.Ich habe eine Regel von Hand hinzugefügt, aber es hat das Problem nicht gelöst –