我需要从我的沙盒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对话,但尚无任何结果。
答案 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关联 调用它的应用程序。