- 締切済み
C# Process.Start で標準入力
はじめまして。 現在、C#で以下のような仕様のEXEをProcess.Startで起動し、ReadToEndで 結果を受け取りたいのですが、できません。 EXEの仕様: DOSプロンプトから以下のように起動します。 ■ xxx.exe < yyy.txt (yyy.txtを解析してDOSプロンプトに結果が出力されるプログラムです) 単に、xxx.exe yyy.txtと実行したのではエラーになるプログラムです。 期待する動き: ■ readToEndに出力ないようが表示される たとえばnotepad.exeのようなプログラムの際には、 Process.Start("notepad.exe", "open.txt"); とすればopen.txtがメモ帳で開かれますが、 今回質問させていただいた関数のように リダイレクト"<"が必要なプログラムで どう実装すれば、Process.Startで正常に動作してくれますでしょうか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Yune-Kichi
- ベストアンサー率74% (465/626)
MSDNに書いてある落とし穴にはまっていますね。 WaitForExitメソッドは,ReadToEndの後に呼び出す必要があります。
- Yune-Kichi
- ベストアンサー率74% (465/626)
Processクラスのインスタンスを作成し必要なプロパティの設定を行ってから, インスタンス用のStartメソッドを呼び出す必要があります。 標準入出力のリダイレクトについては,それぞれMSDNにサンプルがあるので参考になるかと思います。 MSDN: Process.StandardError プロパティ (System.Diagnostics) http://msdn.microsoft.com/ja-jp/library/system.diagnostics.process.standarderror.aspx MSDN: Process.StandardInput プロパティ (System.Diagnostics) http://msdn.microsoft.com/ja-jp/library/system.diagnostics.process.standardinput.aspx MSDN: Process.StandardOutput プロパティ (System.Diagnostics) http://msdn.microsoft.com/ja-jp/library/system.diagnostics.process.standardoutput.aspx
補足
回答ありがとございます。 質問の仕方が不足していました。 以下のように実装していますが、 string param = " < " + xxx.txt; System.Diagnostics.Process p2 = new System.Diagnostics.Process(); p2.StartInfo.FileName = "C:\\test\\sample.exe"; p2.StartInfo.Arguments = param; p2.StartInfo.UseShellExecute = false; p2.StartInfo.RedirectStandardInput = true; p2.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal; p2.StartInfo.RedirectStandardOutput = true; p2.Start(); p2.WaitForExit(); string xxx = p2.StandardOutput.ReadLine(); xxxに期待する文字列が入らないです。 パラメータに指定している"<"が怪しい気がするのですが・・