我想要的是
我想要一个帮助应用程序用户代理(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 委托方法不适用于用户代理进程?
以及如何获得在终止时检查登录项的过程?
我将非常感谢任何帮助。谢谢!
2011 年 6 月 2 日更新 1
经过进一步挖掘,问题更多的是进程永远不会真正退出,它们被操作系统杀死更为常见。
这意味着当您选择“退出”活动监视器中的进程或关闭计算机时,不会调用终止委托方法。
运行以下 Applescript 时,会调用委托方法:
tell application "System Events"
tell application "LapsusHelperApp"
quit
end tell
end tell