在沙盒mac应用程序中执行launchctl

时间:2013-05-22 07:24:24

标签: macos sandbox launchd

我需要从我的沙盒OSX应用程序执行launchctl load/unload命令。该应用程序对启动代理程序的read-write文件所在的文件夹具有plist权限(使用应用程序用户之前授予的安全范围书签)。

然而,该应用程序收到以下错误:

-
5/22/13 9:15:56.420 AM sandboxd[28463]: ([28473]) launchctl(28473) deny file-read-data /private/var/db/launchd.db/com.apple.launchd.peruser.501/overrides.plist
-

为了说清楚,我不想将我自己的应用添加到自动启动的启动项目中,我还发现了关于类似主题的此http://www.mail-archive.com/cocoa-dev@lists.apple.com/msg80413.html对话,但尚无任何结果。

2 个答案:

答案 0 :(得分:3)

文件/private/var/db/launchd.db/com.apple.launchd.peruser.501/overrides.plist只能由管理员用户(root)读取或写入。因此,要使launchctl load\unload工作,您必须是root用户,或者在命令之前使用sudo来提升。但是,在沙箱中你不允许这样做。

根据您的需要,您可以使用帮助应用程序。看看Adding Login Items Using the Service Management Framework

答案 1 :(得分:1)

为了让应用程序执行需要特权操作的操作,Apple建议创建一个帮助应用程序,由于被签名,该应用程序只能被父应用程序调用。使用提升的权限启动帮助应用程序并执行所需的最少操作。在这里看一下SMJobBless: -

http://developer.apple.com/library/mac/#samplecode/SMJobBless/Introduction/Intro.html

正如它所说: -

  

SMJobBless演示了如何安全地安装辅助工具   执行特权操作以及如何将工具与a关联   调用它的应用程序。