1

アプリケーション インスタンスが既に実行されているかどうかを検出する方法を示す投稿がたくさんあることがわかりました。しかし、同じ実行中のアプリケーションにアクセスしたり使用したりする方法を示すものは見つかりません。

シェル メニュー項目を作成し、それらをアプリケーションにリンクしました。たとえば。任意のフォルダを右クリックすると、「OS Monitor」が表示されます。それをクリックすると、アプリケーションが開始されます。フォルダーを再度右クリックして [OS モニター] を選択すると、同じアプリケーションの別のインスタンスが開始されます。これを防がなければなりません。さらに、ユーザーが「OS Monitor」フォームを閉じると、非表示にしました。そのため、ユーザーが同じメニュー オプションを再度選択した場合、同じ実行中のフォームを表示する必要があります。

C#2005 を使用してアプリケーションを作成しました。アプリケーションの同じ実行中のインスタンスにアクセスする方法を知っている人はいますか?

前もって感謝します。

4

1 に答える 1

0

アプリケーションのアドレス空間は分離されているため、グローバルなメカニズム/オブジェクトを使用する必要があります。例は名前付きミューテックスです。名前付きミューテックスを作成します。名前付きミューテックスがすでに存在する場合は、アプリケーションはすでに実行されています。このブログでは、Mutexを使用して1つのインスタンスのみが実行されていることを確認します。

2番目のステップは、実行中のインスタンスと通信することです。したがって、いくつかのIPCメカニズムを使用する必要があります。最も簡単なのは、Windowsを実行している場合(ブログの例のように)、Windowsメッセージを使用することです。ネイティブ呼び出しを行う必要があるため、これはMONOに移植できないことに注意してください。それが重要な場合は、他の可能性の中でもネットワーク接続を使用できます。この質問への回答を参照してください:C#のIPCメカニズム-使用法とベストプラクティス

実行中のインスタンスにパラメーターを送信した後、もちろん終了する必要があります。そうしないと、2つのアプリケーションが実行されることになります。短時間(パラメーター転送の時間)、実際には2つのインスタンスが実行されていますが、効果的にジョブを実行しているのは1つだけです。

この回答は、「OSモニター」に変更を加えることができる/したいという前提で行われました。

于 2009-10-05T15:51:07.370 に答える