0

引数を使用して非表示のコンソール アプリケーションを開こうとしています。基本的に、停止するまでその出力を継続的にファイルに記録します。

メモリストリームを使用してファイルに書き込んでみましたが、少しはうまくいったようです。出力をさらに処理できるように、DataRecievedEvent を利用しようとしています。現在、出力が得られません。

コンソール アプリケーションを開く方法は次のとおりです。

StreamWriter writer = new StreamWriter("tsharkfieldoutput.txt", true)

private void capturePackets(int device)
        {

           string path =
                string.Format("-i " + device +
                              "  -O SNMP -T fields -e snmp.value.oid -e snmp.VarBind -e snmp.variable_bindings -e snmp.value.octets -e snmp.name -R udp src " +
                              destPort);
           string tshark = @"C:\Program Files\Wireshark\tshark.exe";
           ProcessStartInfo ps = new ProcessStartInfo();
           ps.FileName = tshark;
           ps.CreateNoWindow = true;
           ps.WindowStyle = ProcessWindowStyle.Hidden;
           ps.UseShellExecute = false;
           ps.CreateNoWindow = true;
           ps.RedirectStandardOutput = true;
           ps.Arguments = path;
           Process process = new Process();
           process.StartInfo = ps;
           process.Start();
           process.OutputDataReceived += new DataReceivedEventHandler(tshark_OutputDataReceived);
            //Not using stream reader any more.
           //StreamReader myStreamReader = process.StandardOutput;
            writer.Write("Begin tshark output- " + DateTime.Now + " - " + Environment.NewLine);

        }

        private void tshark_OutputDataReceived(object sender, DataReceivedEventArgs arg)
        {
            string tsharkline = arg.Data; //arg.Data contains the output data from the process...        

                writer.Write(tsharkline);

        }
4

1 に答える 1

0

問題は、関数capturePacketsの最後でプロセスへの参照が範囲外になっていることだと思います。プロセス変数にライターと同じスコープを指定するか、WaitForExit() メソッドを使用してプロセスが終了するまで capturePackets 関数で待機する必要があります。作成したプロセスは引き続き実行されますが、プロセスへの参照が (プロセス変数を介して) 範囲外になると、イベントの処理が停止します。

于 2014-03-28T12:02:33.423 に答える