私が欲しいもの
終了時にヘルパー アプリ ユーザー エージェント (Info.plist の LSUIElement が True) をログイン項目に追加する必要があります。
問題
ヘルパー アプリ プロセスが終了する前に実行するコードを取得できません。私の「ログイン項目に追加」コードは正常に動作します。
バックグラウンド
- 常に実行されるヘルパー アプリ ユーザー エージェント プロセスがあります。
- 最初の起動時に、ログイン項目に自分自身を追加します
- アプリが移動された場合、次回のログイン時に、ヘルパー アプリ プロセスが見つからないため、起動されません。
私が試したこと
NSApplication をサブクラス化し、terminate: または stop: をオーバーライドしてそこにコードを配置する必要があるのだろうかと思いますが、それはやり過ぎのようです。確かにもっと良い方法がありますか?
NSAppデリゲートでこれらすべてのさまざまなことを試しました:
-(void)applicationWillTerminate:(NSApplication *)sender {
[self addHelperAppToLoginItems]
}
-(void)applicationDidTerminate:(NSApplication *)sender {
[self addHelperAppToLoginItems]
}
-(NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender {
[self addHelperAppToLoginItems]
}
-(void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
selector:@selector(addHelperAppToLoginItems)
name:NSWorkspaceDidTerminateApplicationNotification
object:nil];
}
-(void)addHelperAppToLoginItems {
// This code never gets called!
}
NSApplication デリゲート メソッドがユーザー エージェント プロセスで機能しないのはなぜですか?
また、終了時にログイン項目をチェックするプロセスを取得するにはどうすればよいですか?
どんな助けにもとても感謝しています。ありがとう!
更新 1 2011 年 6 月 2 日
さらに掘り下げた後、問題はプロセスが実際に終了しないことであり、OSによって強制終了されることがより一般的です。
これは、Activity Monitor でプロセスを「終了」することを選択した場合、またはコンピューターをシャットダウンした場合に、デリゲート メソッドの終了が呼び出されないことを意味します。
次の Applescript が実行されると、デリゲート メソッドが呼び出されます。
tell application "System Events"
tell application "LapsusHelperApp"
quit
end tell
end tell