gpt4 book ai didi

objective-c - SMJobSubmit() 能否用于执行由 SMJobBless 安装的特权助手?

转载 作者:太空狗 更新时间:2023-10-30 03:41:58 28 4
gpt4 key购买 nike

我一直在阅读文档和 SMJobBless 示例以及 Internet 上的各种讨论。我的应用现在使用 SMJobBless() 安装了一个特权助手,但该助手根本没有运行。

助手的全部目的是在应用程序启动时加载 kext,这是我的应用程序的一个重要组件。我看到示例显示尝试通过 XPC 连接到助手将启动助手,但我想让我的助手保持简单和笨拙。

API 文档显示有一个 SMJobSubmit() 函数。它到底是做什么的?我可以使用它来启动之前由 SMJobBless() 安装的特权助手吗?

我对 launchdService Management Framework 的所有术语感到困惑 - 例如,“RunAtLoad”plist 选项控制“你的作业是否启动一次在加载作业时”。 “load”和“launch”到底是什么,它们与“bless/install”和“submit”有什么关系?

最佳答案

SMJobBless 会将您的作业添加到 launchd 的系统中。请参阅 SMJobBless 示例代码以执行此操作。

http://developer.apple.com/library/mac/#samplecode/SMJobBless/Introduction/Intro.html

但是,launchd 的全部目的是控制作业的启动方式和时间,并且默认情况下(在示例代码中)没有指定实际何时启 Action 业,因此作业实际上会永远不会启动。

Nathan de Vries 写了一篇非常好的文章和示例代码,用于使用 SBJobBless 和使用 XPC 与特权作业通信。当然,一个重要的副作用是,尝试与 launchd 服务通信的行为将导致 launchd 实际启动您的服务,因此这将解决您的问题。

http://atnan.com/blog/2012/02/29/modern-privileged-helper-tools-using-smjobbless-plus-xpc/

为了具体回答您的问题,SMJobSubmit 可以执行特权助手。我花了很长时间才弄清楚,但两者之间的区别在于 SMJobSubmit 将允许您使用 launchd 运行具有特权的可执行文件,而 SMJobBless 将永久添加一个 LaunchDaemon。 SMJobBless 的已安装可执行文件将保持受祝福状态,而 SMJobSubmit 将要求您每次重新进行身份验证。

请注意,在这两种情况下,您都必须 SMJobRemove 之前的版本以确保使用新版本。

因此,我认为您需要:

  • SMJobRemove、SMJobSubmit 每次启动您的应用程序时,每次都会提示用户进行身份验证。使用您构建的字典中的 RunAtLoad 属性让助手立即执行。

  • 使用 Nathan 的代码,XPC 连接,询问它的版本号,如果它没有更新,让它退出,然后 SMJobRemove,SMJobBless 一个新版本,然后 XPC 连接并询问它安装你的 kext。这样,用户只需对任何新版本进行身份验证。

关于objective-c - SMJobSubmit() 能否用于执行由 SMJobBless 安装的特权助手?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11699992/

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