web-dev-qa-db-ja.com

アプリケーションを強制的に単一インスタンスにしますか?

Windows上のアプリケーションを強制的に単一インスタンスのアプリケーションにする方法はありますか?つまり、同じアプリケーションの別のインスタンスがすでに実行されている場合は起動しませんか?理想的には、実際のアプリケーションをスタブに置き換えることなくこれを実行できるようにしたいのですが、本当に必要な場合はスタブを使用してもかまいません。

5
Soumya

通常、その「シングルトン」機能をアプリケーションに直接実装する必要があります。 「外部から」保護したい場合は、別のインスタンスがすでに実行されているかどうかをチェックするラッパーを使用する必要があります。これにはもっと解決策があるかもしれませんが、私はかつて nsis でトリックをしました。アイデアはこれです:

5
akira

回避策がない限り、これを可能にする アプリケーション互換性キット で適用できます-これは疑わしいです(それ自体が互換性を損なうようなものではありません)1)–Windowsには設定がありません。

ランチャーアプリケーション以外のアプローチは、新しいプロセスを監視し(たとえば、Win32_ProcessオブジェクトのWMIインスタンス作成イベント-もちろんセッションでフィルター処理されます)、2番目のインスタンスをブロックするアクションを実行することです。


1 もちろん、アプリケーションがサポートされていないメカニズムを使用してそれ自体の複数のインスタンスを検出する場合、修正が必要になる可能性があるため、検出メカニズムにはシムが必要です。

2
Richard