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.
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
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