Включение и выключение брандмауэра при использовании 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), брандмауэр включается или выключается.

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


person Salman Ali    schedule 18.07.2016    source источник
comment
Уверен, что ** должен быть там? Что будет, если их удалить?   -  person Patrick Hofman    schedule 18.07.2016
comment
Какие-то исключения? Коды ошибок?   -  person Patrick Hofman    schedule 18.07.2016
comment
Команда netsh advfirewall set allprofiles state on, поэтому удалите ** technet.microsoft.com/en-us/library/ дд772588   -  person Slai    schedule 18.07.2016


Ответы (1)


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

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

к этому:

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

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

proc.StartInfo.Verb = "runas";
person TheLethalCoder    schedule 18.07.2016