我一直在阅读文档和SMJobBless示例以及Internet上的各种讨论。我的应用程序现在使用SMJobBless()
安装了特权帮助程序,但是该帮助程序根本无法运行。
帮助程序的整个目的是在应用程序启动时加载kext,这是我的应用程序的重要组件。我已经看到了一些示例,这些示例表明尝试通过XPC连接到帮助程序将启动该帮助程序,但是我想保持我的帮助程序简单明了。
API文档显示有一个SMJobSubmit()
函数。它到底是做什么的?我可以用它来启动SMJobBless()
先前安装的特权帮助器吗?
我对launchd
和Service Management Framework
的所有术语感到困惑-例如,“RunAtLoad” plist选项控制“作业加载时是否启动了作业”。 “加载”和“启动”到底是什么,它们与“祝福/安装”和“提交”有何关系?
最佳答案
SMJobBless会将您的工作添加到启动的系统中。有关此操作,请参见SMJobBless示例代码。
http://developer.apple.com/library/mac/#samplecode/SMJobBless/Introduction/Intro.html
但是,启动的整个目的是控制作业的启动方式和时间,并且默认情况下(在示例代码中)没有实际指定何时启 Action 业的规范,因此该作业实际上永远不会启动。 。
内森·德弗里斯(Nathan de Vries)写了一篇非常好的文章和示例代码,介绍了如何使用SBJobBless以及如何使用XPC与特权作业进行通信。当然,导入的一个副作用是,尝试与启动的服务进行通信的行为将导致启动实际上启动您的服务,因此这可以解决您的问题。
http://atnan.com/blog/2012/02/29/modern-privileged-helper-tools-using-smjobbless-plus-xpc/
为了专门回答您的问题,SMJobSubmit可以执行特权助手。我花了很长时间才弄清楚,但是两者之间的区别在于,SMJobSubmit将允许您使用launchd来运行具有特权的可执行文件,而SMJobBless将永久添加一个LaunchDaemon。 SMJobBless的已安装可执行文件将保持良好状态,而SMJobSubmit将要求您每次重新进行身份验证。
请注意,在两种情况下,您都必须SMJobRemove,以确保使用新版本。
因此,我认为您需要:
或者
关于objective-c - 可以使用SMJobSubmit()执行由SMJobBless安装的特权帮助程序吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11699992/