2009-07-04 30 views
4

私はココアでアプリケーションを開発していますが、そのアプリケーションが起動時に既に起動しているかどうかを確認する必要があります。 ..完璧な解決策を探すアプリケーションが既に実行されているかどうか確認してください

+1

と同じ質問http://stackoverflow.com/questions/1081218/ideal-way-to-single-instance-apps-on-the-mac? – smorgan

+0

この同じ質問は、最高の答えを持っています:[リンク](http://stackoverflow.com/questions/684911/how-to-detect-whether-an-os-x-application-is-already-launched) –

答えて

5

あなたは、あなたのココアアプリの複数のインスタンスが同時に実行されないようにしたいと言っているようです。通常、ココアアプリでは複数のインスタンスを同時に実行することはできないため、通常はこのチェックを実行する必要はありません。あなたはココアアプリが同時に実行されていることを発見しているいくつかの特定の状況がありますか?

一般的に、これを解決するためのココアの方法は、NSWorkspaceでlaunchApplicationsを見ています。これは、起動された各アプリケーションの辞書を含むNSArrayを返します。配列をループして、探しているアプリが既に実行中かどうかを確認できます。名前を検索するのではなく、 "com.mycompany.myapp"のような値を持つキーNSApplicationBundleIdentifierで値を使用することをお勧めします。アプリのバンドル識別子を見つける必要がある場合、アプリパッケージ内のinfo.plistファイルを見ることができます。

0

私の答えは、オブジェクトcの実装に固有のものではなく、一般的なアプローチです。 * nixのようなシステムでは、デーモンは通常、その存在を示すためにどこかにpidファイルを作成します。デーモンが複数のインスタンスを許可しない場合、アプリケーションの別の起動は、そのようなpidファイルが存在するかどうかを確認する必要があります。

+1

注目に値するこの回答はデーモンにのみ適用され、実際のアプリケーションには適用されません。さらに、Mac OS X専用のデーモンには適用されません。代わりにlaunchdを使用してチェックインすることをお勧めします。 http://developer.apple.com/technotes/tn2005/tn2083.html –

+0

私は 'daemon'という言葉を使用しましたが、pidファイルパターンはシングルインスタンスデーモンに制限される必要はありません。ユーザーインタラクティブアプリでは、通常、アプリプロファイルの下で.lockfileを使って実装されます。デーモンのpidfileとほとんど同じ目的を果たします。リンクありがとう。 Launchdが推奨されているように見えますが、構成を指定する方法に依存している可能性があります。しかし、私はマルチインスタンスが立ち上がらないようにするためにはまだロックされています。 – jimx

0

psコマンドのインスタンスをpopen()して、アプリケーション名を探すことができます。見つけたら、新しいものをシャットダウンしてください。おそらく最も速い方法ではないかもしれませんが、それはうまくいきます:-)

関連する問題