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 つあります。
最初にパイプを確立できるように、2 つの間でパイプ ハンドルを通信するにはどうすればよいですか?
MyApp.exeが実行された時点ですでに実行されている可能性があることに注意してくださいMyAppStarter.exe。私のシナリオでは、それ
MyAppStarter.exeがサーバーMyApp.exeになり、クライアントになると思います。MyApp.exeこれは、 からの命令をパイプで頻繁にチェックするタイマーを設定する必要があることを意味しMyAppStarter.exeます。私はこの考えに腹を立てていません。この要件は、MyApp.exe1秒ごとにタイマーを起動するための操作のごくわずかな部分であるということだけです。私はそれが好きだっMayApp.exeたvoid PerformInstruction(string instruction).MyAppStarter.exe