这些文档声明,对于SMJobBless,您只能使用SMJobBless
SMJobBless(kSMDomainSystemLaunchd, (CFStringRef)label, authRef, (CFErrorRef *)error);但是如何在LaunchAgents/在用户库中创建一个LaunchAgent,该库使用SMJobBless或类似方法在用户登录时执行呢?
发布于 2019-01-07 06:37:00
这是个老问题,但也许有人也有同样的问题。
添加代理有两种主要方法:使用system (ServiceManagement框架)或命令行工具(launchctl)。
使用API
SMJobBless创建一个运行在root下的守护进程。如果希望在另一个用户下创建代理进程,请使用SMLoginItemSetEnabled函数。这些职能之间略有不同:
SMJobBless注册一个可执行文件,SMLoginItemSetEnabled接受包id作为主要参数,因此对于代理,您需要创建一个Cocoa应用程序。SMLoginItemSetEnabled更容易设置。SMJobBless将可执行文件复制到Library/PrivilegedHelperTools并从那里启动,而不是从包中启动。SMLoginItemSetEnabled从包中启动代理,而不复制它。SMJobBless要求用户输入管理密码;SMLoginItemSetEnabled不需要用户使用任何内容,它不需要根权限。使用launchctl
SMLoginItemSetEnabled只为当前用户注册代理。如果您需要添加一个代理,该代理将为任何登录的用户自动启动,那么将一个配置.plist文件放入/Library/LaunchAgents (您需要根权限)。为了立即加载它,请使用launchctl工具(代码通过NSTask)。关于配置文件的文档:man launchd.plist。
https://stackoverflow.com/questions/26340028
复制相似问题