- - PR -
Exeの結果取得
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-08-02 17:57
いつも参考にさせて頂いています。
OracleのExportユーティリティをVB.NET上から行って、 処理結果を取得したいのですが、以下のソースだと取得できません。 なんとなくデバッグしているとReadToEndのタイミングが早すぎてExportコマンドの出力が出る前に実行されている感じがします。 タイミング的にはWaitForExitが反応する寸前だと思いますが、 この後にReadToEndメソッドを呼んでは駄目ってマニュアルに書いてありました。 どなたか取り方をお教え下さい。 よろしくお願い致します。 Dim results As String Dim psi As New System.Diagnostics.ProcessStartInfo Try psi.FileName = "EXP" '出力を読み取れるようにする psi.RedirectStandardInput = False psi.RedirectStandardOutput = True psi.UseShellExecute = False 'ウィンドウを表示しないようにする psi.CreateNoWindow = True 'コマンドラインを指定 psi.Arguments = strExecParam '起動 Dim p As Process = Process.Start(psi) '出力を読み取る strResult = p.StandardOutput.ReadToEnd 'WaitForExitはReadToEndの後である必要がある '(親プロセス、子プロセスでブロック防止のため) p.WaitForExit() Catch ex As Exception strResult = ex.Message Finally psi = Nothing End Try | ||||
|
投稿日時: 2005-08-03 10:19
終わってから取得になってしまいますからね。 というわけで、Idle 状態になってからじゃダメなんでしょうか... _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-08-03 10:33
おはようございます。
直接的な回答ではありません。ごめんなさい。
自分の環境で試した条件ですが、 ・Oracle 10g ・Exportに[EXPDP.EXE]を使用 確かにkosekiさんのおっしゃる通りにReadToEnd時には取得結果を得られず、 その後に Estimate in progress using BLOCKS method... Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA : : と出力されていました。 とりあえず[EXPDP.EXE]を使用する方法であれば、 ・実行時の引数でNOLOGFILEというのがありますので、出力されたLOGFILEより結果を取得する。 なんてのができるのかなぁ〜と思いました。 もしくは、ストリームの出力を得る為にスレッドを作成するというのはいかがでしょう?(但し今思いついたので、できるかはわかりません) | ||||
|
投稿日時: 2005-08-03 10:34
じゃんぬさん
ご回答、ありがとうございます。 そうですか・・・。 Javaの場合は出来たのに、無理なんですね。 ありがとうございました。 | ||||
|
投稿日時: 2005-08-03 12:52
標準 "エラー" 出力から取って下さい (By Jitta さん)
# StandardOutput を見落としていた... _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-08-03 13:07
みなさん、ご回答ありがとうございます。
標準エラー出力から取得できました! StandardError.ReadToEndメソッドは出力が終了するまで待ってくれるんですね。 解決しました。 ありがとうございました。 | ||||
|
投稿日時: 2005-08-03 13:50
なるほど、その手がありましたか! 全然気づかなかった自分が恥ずかしいです・・・ | ||||
|
投稿日時: 2005-08-03 13:50
なるほど、その手がありましたか! 全然気づかなかった自分が恥ずかしいです・・・ |