3

2 つの exe で構成されるアプリケーションがあります。MyApp.exeそれらを と と呼びましょうMyAppStarter.exe。私が持っている理由は、利用可能MyAppStarter.exeな新しいバージョンがあるかどうかを最初にネットワークでチェックして、MyApp.exe開始する前にコピーできるようにするためです-しかし、それは今ではやや意味がありません.

私が達成したいのは、カスタム URL プロトコル ハンドラーを登録して、MyAppStarter.exe何らかの開始条件を に渡すことができるようにすることMyApp.exeです。たとえば、ユーザーが電子メール内のmyapp://userid=123へのリンクをクリックすると、アプリケーションが起動し、ユーザー ID が 123 のユーザーがすぐに表示されます。または、リンクがmyapp://accid=456の場合accid 456 のアカウントをすぐに表示する必要があります。カスタム URL プロトコル ハンドラーを登録してから、特定の引数を使用してMyAppStarter.exeシェルを作成する方法を知っています。MyApp.exeここまでは順調ですね。

今の問題は、MyApp.exeすでに実行されている必要があることです。それMyAppStarter.exeを認識し (これは私が実行できます)、それにフォーカスを与え (これも実行できます)、指定された ID を持つユーザーまたはアカウントなどを表示するように指示します (これは私が立ち往生しているところです)。

How to Use Anonymous Pipes for Local Interprocess Communicationに関するMSDNのドキュメントを見てきました。単純明快に思えますが、不明な点が 2 つあります。

  1. 最初にパイプを確立できるように、2 つの間でパイプ ハンドルを通信するにはどうすればよいですか? MyApp.exeが実行された時点ですでに実行されている可能性があることに注意してくださいMyAppStarter.exe

  2. 私のシナリオでは、それMyAppStarter.exeがサーバーMyApp.exeになり、クライアントになると思います。MyApp.exeこれは、 からの命令をパイプで頻繁にチェックするタイマーを設定する必要があることを意味しMyAppStarter.exeます。私はこの考えに腹を立てていません。この要件は、MyApp.exe1秒ごとにタイマーを起動するための操作のごくわずかな部分であるということだけです。私はそれが好きだっMayApp.exevoid PerformInstruction(string instruction).MyAppStarter.exe

4

2 に答える 2

2

パイプ/ソケットを使用すると、MyStarterApp.exe からの要求を処理するために常にスレッドが実行されます。クライアントは ReadLine が終了するのを待っており、サーバーから FIN へのシグナルを受信するか、反対側からパイプが閉じられるまで読み取りを続けます。この場合、メソッドは NULL を返します。StreamReader の動作を確認してください。

MyApp.exe 内で、そのスレッドが UI/コンシューマと通信し、適切なユーザーを選択する必要があります。

于 2015-07-09T11:18:58.003 に答える