アプリケーションを単一インスタンスに強制する

アプリケーションを単一インスタンスに強制する

Windows 上のアプリケーションを強制的に単一インスタンス アプリケーションにする方法、つまり、同じアプリケーションの別のインスタンスがすでに実行されている場合は起動しないようにする方法はありますか?

理想的には、実際のアプリケーションをスタブに置き換えなくてもこれを実行できるようにしたいのですが、本当に必要な場合はスタブを使用してもかまいません。

答え1

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

  • 起動したいアプリケーションを包む小さなラッパーである「偽のインストーラー」を作成します。
  • インストーラをシングルトンにします。こちらを参照してくださいインストーラーインスタンスを1つだけ許可するまたはアプリケーションが実行中かどうかを確認する
  • 「ラッパーインストーラー」からアプリケーションを起動します。こちらを参照してくださいExecCmd プラグイン
  • 通常のアプリケーション アイコンをユーザーから「隠して」、偽のインストーラーを表示します。見栄えの良いアイコンを追加できるので、元のプログラムのように見せることができます。

答え2

回避策がない限り、アプリケーション互換性キットこれを有効にするとしたら、Windows には設定がありません(ただし、これ自体は互換性を損なうものではありません1 )。

ランチャー アプリケーション以外の方法としては、新しいプロセス (例:Win32_Processオブジェクトの WMI インスタンス作成イベント - 当然セッションによってフィルター処理されます) を監視し、2 番目のインスタンスをブロックするアクションを実行するという方法があります。


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

関連情報