gpt4 book ai didi

macos - SMJobBless 仅适用于 kSMDomainSystemLaunchd,需要 kSMDomainUserLaunchd

转载 作者:行者123 更新时间:2023-12-03 16:21:19 25 4
gpt4 key购买 nike

文档指出,对于SMJobBless,您只能使用kSMDomainSystemLaunchd

SMJobBless(kSMDomainSystemLaunchd, (CFStringRef)label, authRef, (CFErrorRef *)error);

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

最佳答案

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

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

使用API​​

SMJobBless创建一个守护进程,在 root 下运行。如果您希望创建一个代理进程,在另一个用户下运行,请使用SMLoginItemSetEnabled功能。这些函数之间存在细微差别:

  1. SMJobBless注册一个可执行文件并 SMLoginItemSetEnabled接受bundle id作为主要参数,因此对于代理,您需要创建一个Cocoa应用程序。

  2. SMLoginItemSetEnabled设置起来更加容易。

  3. SMJobBless将可执行文件复制到 Library/PrivilegedHelperTools并从那里启动它,而不是从你的包中启动它。 SMLoginItemSetEnabled从您的包中启动代理,而不复制它。

  4. SMJobBless要求用户输入管理员密码; SMLoginItemSetEnabled不会打扰用户任何事情,它不需要 root 权限。

使用launchctl

SMLoginItemSetEnabled仅为当前用户注册代理。如果您需要添加一个代理,该代理将为任何登录的用户自动启动,请输入配置 .plist文件写入/Library/LaunchAgents (您需要 root 权限才能执行此操作)。为了立即加载它,请使用 launchctl工具(来自代码 - 通过 NSTask )。配置文件的文档:man launchd.plist .

关于macos - SMJobBless 仅适用于 kSMDomainSystemLaunchd,需要 kSMDomainUserLaunchd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26340028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com