2

次のようなプロセスを実行しています。

Process process = new Process();
process.StartInfo = new ProcessStartInfo(localpath);
process.Exited += new EventHandler(process_Exited);
process.EnableRaisingEvents = true;
process.Start();

ここで、localpath は .docx ファイルへのパスです。Word アドインもありImport、リボンにボタンがあります。押されたら、「こんにちは」と言って何らかの値を設定する必要があります。終了すると、process_Exited() メソッドは次のことができるはずです。

MessageBox.Show(the mysterious accessor for that "hi");

ただし、親フォームが別のプロセスにある場合、親フォームにアクセスできないと多くの人が言っているので、それが可能かどうかはまったくわかりません。だから私はそのアイデアをあきらめ、私がしたいのは、その「こんにちは」を親フォーム (別のアプリケーションにあります) に送信することだけです。これは、次に何をすべきかについて十分な指標となります。

このプロジェクトを使用してみましたが、メッセージボックスは親ではなく同じウィンドウに表示されます。これらは 2 つの別々のアプリケーション (WORD と私のアプリケーション) であるためです。環境値も送信しようとしましたが、子でしか取得できません(設定できません!)。

では、子プロセスから親プロセスに渡される値を取得する方法はありますか?

4

1 に答える 1

4

子から親に情報を渡す方法はたくさんあります。

子プロセスがコンソール アプリケーションの場合、子プロセスに値をコンソールに書き込むことができます (例: Console.WriteLine)。親プロセスは、子の出力をリダイレクトして読み取ることができます。例については、.NET アプリケーション (C#) からのコンソール出力のキャプチャーを参照してください。

返される可能性のある値のセットが小さい場合 (つまり、「こんにちは」、「さようなら」、「ヘルプ」など)、それらを列挙して、子に 0 から N までの終了コードを返させることができます。ここで、N は可能な値の数です。プロセスの終了コードを取得する例については、プロセスから戻り値を取得するを参照してください。子プロセスの終了コードを設定するには、Environment.ExitCodeを設定するか、 から値を返しますMain

コンソールを使用できず、テキスト データを返したい場合は、プロセス間通信に名前付きパイプを使用できます。親プログラムはパイプを作成し、子を呼び出します。子はパイプを開き、終了する前にデータベースを親に送信します。

他にも可能性はありますが、そのうちの 1 つがあなたの望みどおりになると思います。

于 2013-07-03T15:02:47.847 に答える