0

I've written a plugin for finder on Mac(mountain lion) and it works perfectly, but I have to run the bundle with sudo. Then I make a package(Packagemaker) to run this bundle and it failed(install correctly and if I run it by clicking desktop icon it failed, if run though commandline with sudo, it works). Does anybody know how to fix this issue just like installing dropbox (and then sync icon shows)

4

1 回答 1

3

您面临的问题是,在内部,mach_inject 调用函数 task_for_pid。

此函数返回给定进程 pid 的内核任务 ID,出于安全原因,Apple 现在要求只能从属于rootprocmod组成员的用户使用此函数。这解释了为什么运行 sudo 对你有用。

如果您只是为了自己使用而开发它,最简单的方法是将自己添加到 procmod 组。但是,如果您想分发该应用程序,您需要确保任何安装程序都安装该程序以作为 root 或 procmod 组的成员运行。

一种可能性是将您的应用程序分成两部分,其中第二部分注册为使用SMJobBless以提升的权限运行。如果您不使用 Objective-C 编程,请不要担心,因为 SMJobBless 所需的实际部分只是 C 函数调用;在给定的示例代码中查找AuthorizationCopyRightsSMJobBless

或者,如果应用程序是代码签名的,那也应该可以工作,尽管这不是我自己尝试过的。你可以在这里阅读


从 OS X 10.11 (El Capitan) 开始,task_for_pid是一个授权的函数调用,仅适用于其证书中具有特定权利的软件,并且不再适用于第 3 方开发人员。

这破坏了 mach_inject,使得检索另一个进程的 mach 任务变得更加困难,同时启用了 SIP(​​系统完整性投影)。

于 2013-10-07T10:27:04.487 回答