【发布时间】:2011-02-06 15:45:12
【问题描述】:
我想要什么
我想要一个帮助应用程序用户代理(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 委托方法不适用于用户代理进程?
我怎样才能让进程在终止时检查登录项?
如果能提供任何帮助,我将不胜感激。谢谢!
11 年 6 月 2 日更新 1
经过进一步挖掘,问题更多的是进程永远不会真正退出,更常见的是它们被操作系统杀死。
这意味着当您选择“退出”活动监视器中的进程或关闭计算机时,不会调用终止委托方法。
运行以下 Applescript 时,会调用委托方法:
tell application "System Events"
tell application "LapsusHelperApp"
quit
end tell
end tell
【问题讨论】:
-
如果您的意思是在启动时将您的应用添加到登录项中,您为什么要在
applicationWillTerminate:中这样做?
标签: cocoa user-agent nsapplication