2015-08-27 10 views
5

Sto creando un'applicazione WPF in cui utilizzo WebCLient per scaricare il file da un server web. Quando avvio la mia app in modalità debug chiede il permesso al Firewall e quindi lo autorizzo, il che rende la mia app funzionante come dovrebbe.L'applicazione WPF non richiede il permesso del firewall

Ma in modalità di rilascio non richiede l'autorizzazione del firewall, il che rende la mia app bloccata durante il download di un file. Distribuisco la mia app in modalità di rilascio. Quando eseguo il file .exe che ottengo dopo la distribuzione, non richiede ancora il permesso del Firewall, il che rende la mia app non funzionante.

C'è un modo per attivare il prompt del firewall, magari a livello di codice, in modalità di rilascio?

+0

Questo può essere rilevante: http://superuser.com/questions/115667/how-do-i-get-the-windows-7-firewall-to-prompt-me-whether-to-allow-or- deny-a-new – PaulF

+0

Mi chiedo perché ricevi un prompt del firewall - WebClient utilizza una connessione in uscita che per impostazione predefinita non è bloccata, quindi sospetto che l'applicazione si arresti in modo anomalo per un altro motivo, qual è l'errore? – markmnl

risposta

0

Da leggere: Ho cercato un modo per richiedere l'accesso al firewall tramite C# ma non ho trovato nulla di rilevante o sicuro. Il batch è pulito al 100% e non verrà rilevato come alcun tipo di malware. non riuscivo a trovare un modo per farlo in C# questo non è off-topic)

non so molto circa la richiesta di aggiungere una regola di autorizzazione, ma so come aggiungere una regola:!
Solo per l'ingresso:

1) Avviare Blocco note e digitare:

@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) Sostituire SomethingSpecial con tutto quello che vuoi. E 'solo un nome e, se non viene sostituito, sostituirlo ovunque (è possibile mantenere SomethingSpecial come è)

3) Sostituire DIRECTORY con la directory di uscita costruzione (ad esempio: C:\program files\something.exe) dir significa set direzione in perché si sta scaricando. per entrambe le direzioni Tipo questo:

@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 

Salva in formato .bat e ricordare il percorso

Ora la parte divertente ..

nelle applicazioni utilizzano sottostante Codice .. Se la vostra il programma non viene eseguito come amministratore e non si desidera che gli utenti continuino a fornire autorizzazioni per trovare il modo di eseguire il processo solo una volta ... Forse salvare in un file, booleano o stringa e controllarlo all'avvio del programma una volta in modo che il programma non esegue la cosa del processo di blocco ev erytime.

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

Sostituire BatchDirectory con la directory batch (uso '/' non '\' proprio qui)

Buon divertimento! Commento se hai una domanda o se hai un problema.

+0

Anche io sto lottando con questo problema. Non capisco come la tua soluzione abbia risolto il problema.Ho aggiunto una regola a mano, ma non ha risolto il problema –

Problemi correlati