コンソールアプリを呼び出す

コンソールアプリケーションの入出力を裏で行うというのは、Win32 Native 時代ではかなり FAQ であり、Delphi ML などでもかなりの回数のやり取りがあった。
やり方を一言で言うならば、CreateProcess などの API に子プロセスのプロセス空間からアクセスできる I/O ハンドルを設定しておくだけ、というかんじである。
CreateProcess の InheritHandle パラメータを true にするとか乱暴なことをすれば結構簡単に実装できるし、Web Service から CGI インターフェスの実装として CGI アプリケーションを TCP/IP ソケットに直結したりとか、コンソールを分離したりグループ化したりするとかしない限りは、頑張れば作れるレベルといったかんじの内容だったと思う。
.NET では Process クラスが最初から StandardOut や StandardError といったプロパティからアクセスすることができて、一見して非常に手軽にみえるのだが、ヘルプに記載されているようにこいつらは結構厄介な作りになっている。