2

ユーザーがシステムにログインするたびに起動される LaunchAgent アプリケーションがあります。

LaunchAgent ファイルは /Library/LaunchAgents にあるため、システムにログインするすべてのユーザーに対してアプリが起動します。

これは私が実際に欲しいものです。

しかし、問題は、高速ユーザー切り替えを使用して別のユーザーにログインするたびに、アクティビティモニターが両方のユーザーに対してアプリケーションが実行されていることを示していることです。 私が望むのは、現在のユーザーのインスタンスのみが常に存在する必要があるということです。そして、ユーザーを切り替えるたびに、前のインスタンスは終了する必要があります。

これについて私を助けてください。ありがとう

4

1 に答える 1

3

Carbon または Cocoa を使用して、ユーザーの切り替えをリッスンできます。Multiple User Environments プログラミング ガイドのUser Switch Notificationsを参照してください。ただし、ユーザー切り替え通知を受け取ったときにプロセスを終了すると、システムが元に戻ったときに launchd はプロセスを再起動しません。

これを処理する最もクリーンな方法は、システムがユーザーのログイン セッションから切り替わったときにユーザーが排他的に使用する必要があるすべてのリソースをアプリが閉じ、システムがログイン セッションから切り替わったときにそれらを再度開くことができるようにすることです。そのセッションに戻ります。

それが不可能な場合は、アプリを 2 つのプロセスに分割できます。launchd によって起動される顔のないヘルパーであり、終了することはなく、その唯一の仕事は完全なアプリと完全なアプリ自体を実行することです。システムが現在のユーザーから切り替わると、完全なアプリは終了できますが、ヘルパーは実行し続けることができます。元に戻すと、ヘルパーは完全なアプリを再起動できます。

最後に、現在のログイン セッションが切り替わったときに launchd が動作するようにすることは、便利な機能のように思えます。Apple のバグ トラッカーに機能リクエストを提出することを検討してください。

于 2013-02-28T04:46:16.400 に答える