集中型デバイスで実行するための小さなプログラムを作成しようとしています。その後、解析、(文字列への出力をリダイレクトする必要があります)、リモートノードからのnetstatデータを収集するために、 "C#とpsexecのプロセス出力リダイレクトの問題
をLISTENING "|このプログラムは
" FINDSTRをPSEXECの\サーバー(複数可)は、netstat -na" を実行します既知のリストと比較することができます。上記の
psexec
cmdをcmd行から問題なく実行できますが、C#プログラム内のプロセスと同じコマンドを実行しようとすると、解析されるデータは返されません。netstat
が実行されていることがわかります(cmdウィンドウがnetstatの結果で点滅します)が、process.standardoutputはストリームを捕まえていません。 pingを使用するか、psexec
以外のものを引数として使用すると、ストリームが捕捉され、結果がテキストボックスに表示されます。また、ファイル名をpsexec.exeに設定して引数を指定しようとしましたが、同じ結果が得られました。最後に、引数なしでpsexecを実行すると、テキストボックスに返されたヘルプの情報が得られます。これは、ファイル名としてpsexec.exe
を実行している場合、またはargs
と指定された "/ c psexec"のファイル名としてcmd.exe
を実行した場合に当てはまります。私は、この時点でローカルで実行しているときにpsexecの出力を捕まえようとしています。私は後でリモートマシンへのpsexecについて心配します。どんな助けでも大変感謝しています。私もそこに報告されている場合のもので、標準エラー出力をキャプチャ推薦
System.Diagnostics.Process pProcess = new System.Diagnostics.Process(); pProcess.StartInfo.FileName = "cmd.exe"; pProcess.StartInfo.Arguments = "/c psexec netstat"; pProcess.StartInfo.UseShellExecute = false; pProcess.StartInfo.RedirectStandardOutput = true; pProcess.Start(); string strOutput = pProcess.StandardOutput.ReadToEnd(); pProcess.WaitForExit(); if (pProcess.HasExited) { textBox1.Text = strOutput; } else { textBox1.Text = "TIMEOUT FAIL"; }
[BeginOutputReadLineのサンプルコードは参考になります](http://msdn.microsoft.com/en-us/library/system.diagnostics) .process.beginoutputreadline.aspx)。 –