我一直在阅读文件和SMJobBless例子,互联网上的各种讨论。 我的应用程序现在安装使用特权帮手SMJobBless()
但助手不会运行在所有。
助手的全部目的就是加载内核扩展,我的应用程序的重要组成部分,每当应用程序启动。 我见过的例子显示,试图通过XPC连接到助手将推出的帮手,但我想保持我的助手简单和沉默。
该API文档表明,有一个SMJobSubmit()
函数。 究竟是什么呢? 我可以用它来推出由以前安装的特权助手SMJobBless()
?
我周围所有的条款困惑launchd
和Service Management Framework
-例如,“你的工作是否在作业被加载时推出一次”中的“RunAtLoad”的plist选项控制。 究竟什么是“负荷”和“启动”,并以“祝福/安装”和“提交”它们是如何相关?
SMJobBless将你的作业添加到launchd中的系统。 见SMJobBless示例代码这样做。
http://developer.apple.com/library/mac/#samplecode/SMJobBless/Introduction/Intro.html
然而,launchd会的整个目的是控制如何以及何时作业启动,默认情况下(在示例代码中),没有实际规范作业应推出,所以这项工作实际上将永远不会被推出。
内森·德弗里斯写了一篇很好的文章和示例代码使用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连接,并要求它来安装你的内核扩展。 这样,用户只需对任何新版本进行验证。
文章来源: Can SMJobSubmit() be used to execute a privileged helper installed by SMJobBless?