3

我是目标 c 的菜鸟,我有一个守护程序代码,它以 root(系统范围的应用程序)运行并与服务器通信。每隔一段时间,服务器将命令该根应用程序启动一个在登录用户上下文中运行的附加应用程序(不会中断用户 - 静默)。我也编写了用户上下文应用程序。我缺乏的是对我的根守护进程如何启动用户上下文应用程序的理解。

  1. 我的守护进程如何按需启动它?
  2. 我应该使用代理吗?
  3. 这是否意味着代理将在启动时运行?

我已阅读https://developer.apple.com/library/mac/#technotes/tn2005/tn2083.html以及http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/ BPSystemStartup/Chapters/CreatingLaunchdJobs.html但觉得我错过了一些东西。

顺便说一句 - 该解决方案应该适用于 10.6、10.7、10.8 ...

提前谢谢大家:o)

4

1 回答 1

0

如果您知道当前登录的用户,这将起作用。

sudo chown -R current_loggedin_user myApp
sudo chmod u+s /Contents/MacOS/myApp
system([@"open myApp" UTF8String]);  //inside root process  

如果 s 权限组设置了用户位(对应于 u+s),那么无论何时任何人执行该程序,该进程都会获得拥有它的人的权限。所以 current_loggedin_user 是 myApp 的所有者,open 将以 current_loggedin_user 模式运行 myApp。

s set-user-ID-on-execution 和 set-group-ID-on-execution 位。

u 文件原始模式中的用户权限位。

但是如果用户没有登录,它会抛出以下错误。

com.apple.launchd[1]: System: Bug: launchd_core_logic.c:8760 (24498):0
com.apple.launchd[1]: System: job_mig_spawn() can't find its session!
open[24459]: spawn_via_launchd() failed, errno=5 label=[0x0-0x274274].
rootProcess[23127]: LSOpenURLsWithRole() failed with error -10810 for the file /Applications/myApp.app/.
于 2013-10-21T12:12:49.560 回答