2013-01-11 20 views
6

私は、リスト内のすべてのサーバの時刻を取得するユーティリティを開発しました。cmdプロンプト画面を非表示にしたい

System.Diagnostics.Process p; 
string server_name = ""; 
string[] output; 
p = new System.Diagnostics.Process(); 
p.StartInfo.FileName = "net"; 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.RedirectStandardOutput = true; 
p.StandardOutput.ReadLine().ToString() 

このコードを実行している間。 Cmdプロンプト画面が表示されます。私はそれをユーザーから隠したいと思う。私は何のためにそれをすることができますか?

答えて

11

UseShellExecute = false

// don't execute on shell 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.CreateNoWindow = true; 

// don't show window 
p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized; 

を、あなたはリダイレクトすることができます出力:

// redirect standard output as well as errors 
p.StartInfo.RedirectStandardOutput = true; 
p.StartInfo.RedirectStandardError = true; 

これを行うと、過剰充填バッファにデッドロックを回避するために、出力バッファの非同期読み込みを使用してdは:

StringBuilder outputString = new StringBuilder(); 
StringBuilder errorString = new StringBuilder(); 

p.OutputDataReceived += (sender, e) => 
      { 
       if (e.Data != null) 
       { 
        outputString.AppendLine("Info " + e.Data); 
       } 
      }; 

p.ErrorDataReceived += (sender, e) => 
      { 
       if (e.Data != null) 
       { 
        errorString.AppendLine("EEEE " + e.Data); 
       } 
      }; 
+0

UseShellExecute = falseは、STDOUTとSTDERRを有用なストリームにリダイレクトすることもできます。 –

+0

@SrikanthVenugopalan OPがすでにそれをしたので、私はそれを残しました。 – Matten

+1

はい、あなたは正しいです、私の悪いです。個人的には、私はRedirectStandardErrorがより重要だと感じます。 –

0

この

p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 

または

がCreateNoWindowプロパティを使用してあるUseShellExecuteを設定し、任意のウィンドウなしの子プロセスを実行するには

もこれを確認するの両方を試してみてください。

ProcessStartInfo info = new ProcessStartInfo(fileName, arg); 
info.CreateNoWindow = true; 
info.UseShellExecute = false; 
Process processChild = Process.Start(info); 

私はあなたがMSDNのこのポストthrought行くことをお勧め:あなたは何のウィンドウを使用しないためにか、それを最小限にするためのプロセスを伝えることができHow to start a console app in a new window, the parent's window, or no window

4

は、このようなProcessWindowStyle列挙してみてください。

p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.CreateNoWindow = true; 

隠されたウィンドウスタイル。ウィンドウは表示または非表示にできます。 システムでは、非表示ウィンドウを表示しません。ウィンドウが で隠されていると、効果的に無効になります。隠されたウィンドウは、システムまたは他のウィンドウからの メッセージを処理できますが、ユーザまたはディスプレイ出力からの入力を処理することはできません。多くの場合、アプリケーションは ウィンドウの外観、 をカスタマイズしている間、新しいウィンドウを非表示にしてから、ウィンドウスタイルを標準にすることができます。 ProcessWindowStyle.Hiddenを使用するには、ProcessStartInfo.UseShellExecute プロパティは、でなければなりません。

0

システムリファレンスを追加してください。

using System.Diagnostics; 

このコードを使用して、隠れたCMDウィンドウでコマンドを実行します。

Process cmd = new Process(); 
cmd.StartInfo.FileName = "cmd.exe"; 
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
cmd.StartInfo.Arguments = "Enter your command here"; 
cmd.Start(); 
関連する問題