2016-07-18 7 views
0

Я написал программу на C#, которая использует аргументы командной строки для . Включите и выключите брандмауэр.Включить и выключить брандмауэр с помощью C#

Process proc = new Process(); 
string top = "netsh.exe"; 
proc.StartInfo.Arguments = "**Advfirewall set allprofiles state on**"; 
proc.StartInfo.FileName = top; 
proc.StartInfo.UseShellExecute = false; 
proc.StartInfo.RedirectStandardOutput = true; 
proc.StartInfo.CreateNoWindow = true; 
proc.Start(); 
proc.WaitForExit(); 
// MessageBox.Show("Disable"); 
button1.Text = "Set On"; 
status = false; 

Я также запускаю приложение с разрешением администратора. Приложение автоматически запускается с правами администратора, но не включает или отключает статус брандмауэра.

Когда я запускаю ту же команду в cmd (netsh), брандмауэр включен или выключен.

Кто-нибудь знает, почему это не работает?

+0

Уверен, что '**' должен быть там? Что произойдет, если вы их удалите? –

+0

Любые исключения? Коды ошибок? –

+0

Команда 'netsh advfirewall устанавливает allprofiles state on', поэтому удалите' ** 'https://technet.microsoft.com/en-us/library/dd772588 – Slai

ответ

2

Выполнение того же кода, но удаление ** похоже срабатывает. то вам нужно изменить:

proc.StartInfo.Arguments = "**Advfirewall set allprofiles state on**"; 

к этому:

proc.StartInfo.Arguments = "Advfirewall set allprofiles state on"; 

Обратите внимание, что вы должны запустить приложение, которое запускает процесс с правами администратора и начать процесс как администратор вы можете также использовать :

proc.StartInfo.Verb = "runas";