プロが教えるわが家の防犯対策術!

はじめまして。

現在、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で正常に動作してくれますでしょうか?

よろしくお願いします。

A 回答 (2件)

MSDNに書いてある落とし穴にはまっていますね。



WaitForExitメソッドは,ReadToEndの後に呼び出す必要があります。
    • good
    • 0

Processクラスのインスタンスを作成し必要なプロパティの設定を行ってから,


インスタンス用のStartメソッドを呼び出す必要があります。

標準入出力のリダイレクトについては,それぞれMSDNにサンプルがあるので参考になるかと思います。

MSDN: Process.StandardError プロパティ (System.Diagnostics)
http://msdn.microsoft.com/ja-jp/library/system.d …
MSDN: Process.StandardInput プロパティ (System.Diagnostics)
http://msdn.microsoft.com/ja-jp/library/system.d …
MSDN: Process.StandardOutput プロパティ (System.Diagnostics)
http://msdn.microsoft.com/ja-jp/library/system.d …

この回答への補足

回答ありがとございます。

質問の仕方が不足していました。
以下のように実装していますが、

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に期待する文字列が入らないです。
パラメータに指定している"<"が怪しい気がするのですが・・

補足日時:2010/11/18 08:01
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!