3

我需要launchctl load/unload从我的沙盒 OSX 应用程序中执行命令。该应用程序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类似话题的对话还没有任何结果。

4

2 回答 2

3

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

根据您的需要,您可以使用 Helper 应用程序。查看使用服务管理框架添加登录项

于 2013-05-22T07:42:58.690 回答
1

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

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

正如它所说: -

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

于 2013-05-22T09:12:15.847 回答