0

我使用 loginItems 运行的 xpcservices 为 os x 应用程序创建项目。这意味着该服务是在路径中的应用程序中建立的:{APP_NAME}.app/Contents/Library/LoginItems 并且负责运行该服务的人是主应用程序:

NSXPCConnection *connection = [[NSXPCConnection alloc] initWithLoginItemName:@"{SERVICE_NAME}.app" error:&error]; 

我构建了卸载程序,用于删除我安装的所有文件。我需要删除该服务。我用于它的命令:

launchctl remove SERVICE_NAME

如果我从终端运行它,这很好用,但如果我从脚本运行它,它会从“活动监视器”中删除该服务,但该服务仍然在状态为-5的launchctl列表中。所以如果我安装新版本,它会采用以前安装的版本。

我从 xcode 运行脚本NSTask。没有错误。它做了脚本应该做的事情。我什至设置了管理员权限:

/usr/bin/osascript -e 'do shell script \"SCRIPT_NAME args 2>&1 etc\" with administrator privileges'

为什么它不像我在终端中那样删除?

ps:从 Xcode 运行时它的工作原理(即使应用程序处于发布模式)

4

1 回答 1

0

要正确删除登录项,您应该在代码中执行此操作:将 false 传入SMLoginItemSetEnabled

SMLoginItemSetEnabled((__bridge CFStringRef)loginItemBundleId, false)
于 2016-01-26T09:35:37.673 回答