2016-07-18 8 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; 

私もadmin権限でアプリケーションを実行します。アプリケーションは管理者権限で自動的に実行されますが、ファイアウォールのステータスはオンまたはオフに設定されません。

cmd(netsh)で同じコマンドを実行すると、ファイアウォールがオンまたはオフになります。

これはなぜ動作しないのですか?

+0

確かに '**'はそこにあるはずですか?あなたがそれらを削除するとどうなりますか? –

+0

例外はありますか?エラーコード? –

+0

このコマンドは 'netsh advfirewall allprofiles state on on'ですので、' ** 'https://technet.microsoft.com/en-us/library/dd772588を削除してください。 – Slai

答えて

2

同じコードを実行しているのに、**を削除しても動作するようです。あなたは管理者としてのプロセスを起動し、使用することもできadminとしてプロセスを開始するアプリケーションを実行する必要があります

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

注:これに

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

:つまり、あなたはこれを変更する必要があります:

proc.StartInfo.Verb = "runas"; 
関連する問題