首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SMJobBless只与kSMDomainSystemLaunchd一起工作,需要kSMDomainUserLaunchd

SMJobBless只与kSMDomainSystemLaunchd一起工作,需要kSMDomainUserLaunchd
EN

Stack Overflow用户
提问于 2014-10-13 12:28:33
回答 1查看 470关注 0票数 4

这些文档声明,对于SMJobBless,您只能使用SMJobBless

代码语言:javascript
复制
SMJobBless(kSMDomainSystemLaunchd, (CFStringRef)label, authRef, (CFErrorRef *)error);

但是如何在LaunchAgents/在用户库中创建一个LaunchAgent,该库使用SMJobBless或类似方法在用户登录时执行呢?

EN

回答 1

Stack Overflow用户

发布于 2019-01-07 06:37:00

这是个老问题,但也许有人也有同样的问题。

添加代理有两种主要方法:使用system (ServiceManagement框架)或命令行工具(launchctl)。

使用API

SMJobBless创建一个运行在root下的守护进程。如果希望在另一个用户下创建代理进程,请使用SMLoginItemSetEnabled函数。这些职能之间略有不同:

  1. SMJobBless注册一个可执行文件,SMLoginItemSetEnabled接受包id作为主要参数,因此对于代理,您需要创建一个Cocoa应用程序。
  2. SMLoginItemSetEnabled更容易设置。
  3. SMJobBless将可执行文件复制到Library/PrivilegedHelperTools并从那里启动,而不是从包中启动。SMLoginItemSetEnabled从包中启动代理,而不复制它。
  4. SMJobBless要求用户输入管理密码;SMLoginItemSetEnabled不需要用户使用任何内容,它不需要根权限。

使用launchctl

SMLoginItemSetEnabled只为当前用户注册代理。如果您需要添加一个代理,该代理将为任何登录的用户自动启动,那么将一个配置.plist文件放入/Library/LaunchAgents (您需要根权限)。为了立即加载它,请使用launchctl工具(代码通过NSTask)。关于配置文件的文档:man launchd.plist

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26340028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档