我一直在阅读文档和SMJobBless示例以及互联网上的各种讨论。我的应用程序现在使用SMJobBless()
安装特权帮助程序,但帮助程序根本不运行。
帮助程序的全部目的是在应用程序启动时加载kext,这是我应用程序的一个重要组件。我已经看到一些例子显示尝试通过XPC连接到帮助程序将启动帮助程序,但我想让我的助手简单而愚蠢。
API文档显示有SMJobSubmit()
函数。它到底是做什么用的?我可以使用它来启动SMJobBless()
之前安装的特权帮助程序吗?
我对launchd
和Service Management Framework
周围的所有术语感到困惑 - 例如,“RunAtLoad”plist选项控制“在作业加载时是否启动了一次作业” 。什么是“加载”和“启动”,它们与“祝福/安装”和“提交”有什么关系?
答案 0 :(得分:9)
SMJobBless会将您的工作添加到launchd的系统中。请参阅SMJobBless示例代码以执行此操作。
http://developer.apple.com/library/mac/#samplecode/SMJobBless/Introduction/Intro.html
然而,launchd的整个目的是控制作业的启动方式和时间,默认情况下(在示例代码中),实际上没有规定应该启动作业,因此作业实际上是永远不会推出。
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前一个以确保使用新版本。
所以,我认为你需要:
OR