Что я хочу
Я хочу, чтобы пользовательский агент приложения-помощника (LSUIElement в Info.plist - 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 не работают с процессом агента пользователя?
А как я могу заставить процесс проверки элементов входа в систему завершаться?
Я был бы очень благодарен за любую помощь. Спасибо!
ОБНОВЛЕНИЕ 1 6/2/11
После дальнейших раскопок проблема заключается в том, что процессы так и не завершаются, для них более распространенным является гибель ОС.
Это означает, что когда вы выбираете «Завершить» процесс в Activity Monitor или выключаете компьютер, методы завершения делегата не вызывают.
Когда запускается следующий Applescript, вызывается метод делегата:
tell application "System Events"
tell application "LapsusHelperApp"
quit
end tell
end tell