質問

私は、アプリケーションインスタンスがすでに実行されているかどうかを検出する方法を示す記事がたくさんある見つけます。しかし、私がアクセスしたり、同じ実行中のアプリケーションを使用する方法を示しいずれかを見つけるカントます。

私はシェルのメニュー項目を作成し、それらのアプリケーションをリンクしています。 EXのために。あなたが右の任意のフォルダをクリックした場合は、「OSモニタ」を示しています。私は上のクリックした場合はアプリケーションが起動されていること。私は再び右のフォルダをクリックし、「OSモニタ」同じアプリケーションの別のインスタンスを選択した場合に開始されます。私はこれを防ぐために持っています。また、より多くのユーザーは、私はちょうどそれが隠され作られた「OSモニタ」フォームを閉じたとき。ユーザーが再び同じ実行形式、同じメニューオプションを選択した場合になるように表示する必要があります。

私はC#2005を使用してアプリケーションを作成しました。誰もが、私は、アプリケーションの実行中の同じインスタンスにアクセスすることができる方法のアイデアを持っています。

事前に感謝します。

役に立ちましたか?

解決

アプリケーションのアドレス空間が分離されると、

、あなたはいくつかのグローバルメカニズム/オブジェクトを使用する必要があります。例では、ミューテックスを命名されています。あなたはそれがすでに存在する場合、そのアプリケーションが既に実行されていた、という名前のミューテックスを作成します。 確保するためのミューテックスを使用したインスタンスは1つだけ提示されて実行されていることこのブログでの

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

実行中のインスタンスにパラメータを送信した後、あなたがそうでなければ、2つのアプリケーションが実行中になってしまいます、もちろんの出口に持っています。短い時間(パラメータ転送の時間)のために、あなたは確かに2つのインスタンスが実行されているが、一つだけを効率的に仕事をしている必要があります。

この応答は、あなたが/変更を行いたいことができます仮定の下でなされたに「OSモニタ」ます。

scroll top