首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用SMJobSubmit()来执行由SMJobBless安装的特权助手?

是否可以使用SMJobSubmit()来执行由SMJobBless安装的特权助手?
EN

Stack Overflow用户
提问于 2012-07-28 17:54:07
回答 1查看 3.1K关注 0票数 6

我一直在阅读文档和SMJobBless示例,以及互联网上的各种讨论。我的应用程序现在使用SMJobBless()安装了一个特权助手,但助手根本不能运行。

helper的整个目的是在应用程序启动时加载一个kext,这是我的应用程序的一个重要组件。我已经看过一些示例,说明尝试通过XPC连接到帮助程序将启动帮助程序,但我希望让我的帮助程序简单明了。

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

我被围绕launchdService Management Framework的所有术语搞糊涂了--例如,"RunAtLoad“plist选项控制”你的作业是否在作业加载时启动一次“。“加载”和“启动”到底是什么,它们与“祝福/安装”和“提交”有什么关系?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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前一个版本,以确保使用新版本。

所以,我认为你需要:

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

  • 使用Nathan的代码,XPC connect,询问它的版本号,如果它没有更新,让它退出,然后SMJobRemove,SMJobBless一个新版本,然后XPC connect并要求它安装您的kext。这样,用户只需对任何新版本进行身份验证。
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11699992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档