我一直在阅读文档和SMJobBless示例,以及互联网上的各种讨论。我的应用程序现在使用SMJobBless()安装了一个特权助手,但助手根本不能运行。
helper的整个目的是在应用程序启动时加载一个kext,这是我的应用程序的一个重要组件。我已经看过一些示例,说明尝试通过XPC连接到帮助程序将启动帮助程序,但我希望让我的帮助程序简单明了。
接口文档显示有一个SMJobSubmit()函数。它到底是做什么的?我可以用它来启动之前由SMJobBless()安装的特权助手吗?
我被围绕launchd和Service Management Framework的所有术语搞糊涂了--例如,"RunAtLoad“plist选项控制”你的作业是否在作业加载时启动一次“。“加载”和“启动”到底是什么,它们与“祝福/安装”和“提交”有什么关系?
发布于 2012-08-06 11:57:03
SMJobBless会将你的工作添加到启动程序的系统中。有关此操作,请参阅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前一个版本,以确保使用新版本。
所以,我认为你需要:
或
https://stackoverflow.com/questions/11699992
复制相似问题