私はココアでアプリケーションを開発していますが、そのアプリケーションが起動時に既に起動しているかどうかを確認する必要があります。 ..完璧な解決策を探すアプリケーションが既に実行されているかどうか確認してください
答えて
あなたは、あなたのココアアプリの複数のインスタンスが同時に実行されないようにしたいと言っているようです。通常、ココアアプリでは複数のインスタンスを同時に実行することはできないため、通常はこのチェックを実行する必要はありません。あなたはココアアプリが同時に実行されていることを発見しているいくつかの特定の状況がありますか?
一般的に、これを解決するためのココアの方法は、NSWorkspaceでlaunchApplicationsを見ています。これは、起動された各アプリケーションの辞書を含むNSArrayを返します。配列をループして、探しているアプリが既に実行中かどうかを確認できます。名前を検索するのではなく、 "com.mycompany.myapp"のような値を持つキーNSApplicationBundleIdentifierで値を使用することをお勧めします。アプリのバンドル識別子を見つける必要がある場合、アプリパッケージ内のinfo.plistファイルを見ることができます。
私の答えは、オブジェクトcの実装に固有のものではなく、一般的なアプローチです。 * nixのようなシステムでは、デーモンは通常、その存在を示すためにどこかにpidファイルを作成します。デーモンが複数のインスタンスを許可しない場合、アプリケーションの別の起動は、そのようなpidファイルが存在するかどうかを確認する必要があります。
注目に値するこの回答はデーモンにのみ適用され、実際のアプリケーションには適用されません。さらに、Mac OS X専用のデーモンには適用されません。代わりにlaunchdを使用してチェックインすることをお勧めします。 http://developer.apple.com/technotes/tn2005/tn2083.html –
私は 'daemon'という言葉を使用しましたが、pidファイルパターンはシングルインスタンスデーモンに制限される必要はありません。ユーザーインタラクティブアプリでは、通常、アプリプロファイルの下で.lockfileを使って実装されます。デーモンのpidfileとほとんど同じ目的を果たします。リンクありがとう。 Launchdが推奨されているように見えますが、構成を指定する方法に依存している可能性があります。しかし、私はマルチインスタンスが立ち上がらないようにするためにはまだロックされています。 – jimx
psコマンドのインスタンスをpopen()して、アプリケーション名を探すことができます。見つけたら、新しいものをシャットダウンしてください。おそらく最も速い方法ではないかもしれませんが、それはうまくいきます:-)
- 1. アプリケーションが実行されていないか確認してください。
- 2. アプリケーションがFlutterで最初に実行されているかどうか確認してください
- 3. Java - 別のJavaアプリケーションが実行されているかどうかを確認してください。
- 4. OAuth 2.0が既に承認されているかどうかを確認してください
- 5. プロセスがパイプとして実行されているかどうかを確認してください。
- 6. DLLが既に登録されているか確認してください。
- 7. プロセスがシェルスクリプトで実行されているか確認してください。
- 8. ファイルがアップロードされているかどうか確認してください。
- 9. コンテンツが既にPHPで送信されているかどうかを確認してください
- 10. 環境変数が既に設定されているかどうかを確認してください。
- 11. ブロードキャストレシーバが既に登録されているかどうか確認してください。
- 12. rubyスクリプトが既に実行されているかどうかを確認
- 13. Windows OSがセーフモードで実行されているかどうか確認してください
- 14. cronjobsが実行されているかどうかを確認してください
- 15. Android:経由でサービスが実行されているかどうかを確認してください。 bindService
- 16. VBScript - mailItemが実行可能かどうかを確認してください
- 17. WinJS:デバッグモードで実行されているか確認してください
- 18. Silex - 既にデータベースに登録されているかどうか確認してください
- 19. msiが実行される前にインストールされている他のアプリケーションを確認してください
- 20. グラブルテストがシェルスクリプトで行われるかどうか確認してください
- 21. twitterアプリケーションがインストールされているか確認してください
- 22. ステータスバーが隠れているかどうかを確認してください
- 23. アプリケーションがバックグラウンドタスクから実行されていることを確認してください
- 24. ブランチが実行されていることを確認してください。
- 25. DLLが別のアプリケーションで使用されているかどうかを確認してください
- 26. Asp.Net(Core)アプリケーションがIISでホストされているかどうか確認してください。
- 27. RunOnUiThreadが必要かどうか確認してください。
- 28. Curlドメインがルートかどうか確認してください。
- 29. DrawableResがVectorDrawableかどうか確認してください
- 30. テスト:タプルが返されるかどうか確認してください。
と同じ質問http://stackoverflow.com/questions/1081218/ideal-way-to-single-instance-apps-on-the-mac? – smorgan
この同じ質問は、最高の答えを持っています:[リンク](http://stackoverflow.com/questions/684911/how-to-detect-whether-an-os-x-application-is-already-launched) –