私はユーザーエージェントプロセスが終了したときにコードを実行するにはどうすればよいですか?
たい私は、終了のログイン項目に自分自身を追加する(Info.plistの中LSUIElementがTrue)ヘルパーアプリのユーザーエージェントをしたいです。
問題
私はヘルパーアプリプロセスが終了する前に実行する任意のコードを取得することはできません。 私の「ログイン項目に追加」のコードは正常に動作します。
背景
- 私は最初の起動時に
- すべての時間を実行しているヘルパーアプリユーザー・エージェント・プロセスを持って、それはアプリが移動された場合はアイテム
- にログインするために自分自身を追加し、次のログイン時にヘルパーアプリプロセスが見つかりません。起動していません。
私が試したこと
NSApplicationをサブクラス化して終了をオーバーライドする必要があるのだろうか:停止して:そこに自分のコードを入れてしまいますが、それは過剰なようです。確かに良い方法がありますか?
私は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のデリゲートメソッドは、ユーザー・エージェント・プロセスでは動作しないのですか?
また、終了時にログイン項目を確認するプロセスを取得するにはどうすればよいですか?
私はどんな助けでも非常に感謝しています。ありがとう!さらにいくつかの掘削後
UPDATE 1 6/2/11
、問題は、彼らがOSによって殺さすることがより一般的ですが、プロセスが実際に終了し得ることは決してないということではありません。
これは、アクティビティモニタでプロセスを「終了」するか、コンピュータをシャットダウンすると、デリゲートの終了メソッドが呼び出されないことを意味します。以下のAppleScriptがデリゲートメソッドが呼び出されるか、実行されると
:さらにいくつかの掘削後
tell application "System Events"
tell application "LapsusHelperApp"
quit
end tell
end tell
起動時にログイン項目にアプリケーションを追加する場合は、なぜ「applicationWillTerminate:」で実行していますか? –