2012-03-07 9 views
0

私は同僚との争いをしています。彼はSystem.Diagnostics.Processオブジェクトを使って呼び出してprocess.Start()を呼び出すプログラムを書いています。しかし、特定の状況下では、彼は自分自身のプロセスをクラッシュさせるために例外を投げたがっています。私はprocess.StandardErrorを使って彼の例外を捕まえ、そこから対処するはずです。プロセス間で文字列エラーメッセージを渡すには?

これは非常に悪い考えです。処理されない例外を介してプロセスを終了することは、Windows OS自体が座っていることに気づき、エラーメッセージボックスをポップアップするようなことをすることです。これは非常に望ましくありません。私は彼がむしろ意味のあるエラーコードで優雅に終了すべきだと思って、私はプロセスのExitCodeを確認することができます。しかし、整数では不十分だという。彼はエラーメッセージを文字列で送信したいと考えています。

私は彼が自分のアプリをクラッシュさせて例外をスローすることに反対しているのですか?私たちが2つのアプリケーションの間に特別な通信メカニズムを定義しなくても、私に文字列のエラーメッセージを渡す簡単な方法はありますか?他に何をお勧めしますか? ExitCodeとともに

+1

私はあなたの腸に同意します。あなたが同僚に情報を伝えることができるからといって例外を使用しているようです。それはまったく例外ではありません... – Treb

答えて

3

ExitCodeはもっと良いアイデアのようです。これははるかに優雅で、多くの(すべてではないにしても)呼び出し環境で扱うことができます。 ExitCodeはまさにこの目的のためのものです。

ExitCodeが十分ではないという彼の発言に応じて、それは意味がありません。 ExitCodeは、各例外コード(原因、修正など)を詳述する仕様書と組み合わせて使用​​されることになっています。この仕様書は、ソフトコピー、ハードコピー、または単に開発者の心の中に存在する可能性があります。

2

、あなたがRedirectStandardOutput使用して他のいくつかの出力読み取ることができます - それを有効にすることで

を、プロセスの標準出力\の標準エラー出力を読み、そのことにより、エラー

に関するいくつかの詳細を持つことができるyou`ll

これは単なるアイデアです(これはうまくいくかもしれません)。これはもっと良い方法があります。

1

私は彼のプログラムがコマンドライン実行可能であると仮定します。彼が.netの世界にいるなら、他の形式のプロセス間通信、Named PipesまたはWCFを使用することをお勧めします。または、プロセスの大部分をdllに抽出して、独自のプロセスの中でdllを呼び出すことができます。そして、彼がまだexeを望むなら、彼はこのためにexeフロントエンドを作成することができます。

私の経験では、System.Diagnostic.Processは強力なキャラクターと多くのプロダクションでのプロンプトを持っていますが、私はそれを離れています。

stdinまたはstderrからエラーメッセージを解析することはさらに悪化します。

良いスレッドがここにあります:

What is the best choice for .NET inter-process communication?

関連する問題