2009-02-20 19 views
8

これは私の目の前にコードがないので少し痛いですが、説明しようとします。なぜC#ProcessStartInfoRedirectStandardOutputがxcopyプロセスを失敗させるのでしょうか

私は、Rubyスクリプトを起動するシンプルなC#アプリケーションを持っています(他にもいくつかのことがありますので、バッチファイルを生成して実行します)。

私はC#のプロセスオブジェクトを使用していますが、私は以下の redirectstandardoutput =真 redirectstandarderror =真 あるUseShellExecute = falseを CreateNoWindow = trueを設定し(そこ後方ロジックの素敵なビットを!)

私は、2つのスレッドを作成エラーと出力ストリームの両方に対してReadLine()をポーリングし、WaitForExit()を呼び出す前にそれらの両方が終了するのを待機します。

私は出力をリダイレクトするときにRubyスクリプトがシステム( "xcopy ...")コマンドを呼び出すことができません(エラーは生成されず、コピーされません)。また、私はそれをコピーするように頼む他のファイルをコピーしません。

私は両方のストリームをスレッドに向け、そのうちの1つをリダイレクトしてReadToEnd()を呼び出すだけです。

redirectstandardoutputとredirectstandarderrorをfalseに設定すると正しく動作します。

私はここで完全に迷っています。私はおそらく出力ストリームがいっぱいになっていると思ったが、なぜ私はReadLineを呼び出すのか想像できない(私は各行を解析し、エンドユーザに関連するものだけを表示できるように、読み込み行が必要だ)。また、スレッド化されたC#プロセスからdosコマンドを呼び出すと問題が発生するかもしれないとも考えました。

ここで何が起こっているのでしょうか?私はVS .NET 2005にいると言わなければならない。これは.Net Framework 2.0だと思う。

答えて

9

obscure post on the MSDN forumsには、XCOPY自体の不具合があるようですが、XCOPYのSTDOUTをリダイレクトすると、STDINもリダイレクトする必要があります。

注:私はこのコミュニティのwikiマーキングてるので、ルビーを知っている誰かがシステムにリダイレクトSTDINにいくつかのサンプルコードを書くことができ()

+0

これが問題でした。私は単純にprocessToRun.StartInfo.RedirectStandardInput = trueを設定し、xcopyは完全に機能しました。 出力がうまくいっていたら、入力をリダイレクトするつもりでした。 –

+0

ありがとう!大規模なバッチスクリプトで同じ問題があり、私がこれを見つけるまですべてを試しました。 – Botz3000

関連する問題