使用Launch Daemon中的GUI启动User App

时间:2011-09-19 17:27:45

标签: xcode macos cocoa

我有一个在用户上下文之外以root身份运行的Launch Daemon。此守护程序始终运行并监视服务器。有时,我的守护进程将从服务器获取命令,告诉它向用户显示某些内容。显然我无法从启动守护进程中执行此操作,因为它不在“WindowsServer”环境中运行 - 因此另一个选项是为每个有权能够显示GUI的用户生成单独的进程。

我有一个选择是制作一个启动代理并让操作系统为我启动它。然后,启动代理可以与启动守护程序通信,以确定何时需要显示某些内容。

问题在于:服务器有时会提供实际二进制文件的更新。因此,服务器会向Launch Daemon发送一系列文件,这些文件应该在现有文件的基础上复制出来。如果我正在运行启动代理,我该如何关闭它以便可以更新代理本身?同样,如何在更新完成后重新启动代理?

1 个答案:

答案 0 :(得分:0)

关闭袖口,我会说你应该为你的守护进程安排一种方法,要求发射代理按需退出,就像你安排它按需启动一样。一旦您知道代理已退出,您的守护程序就可以继续进行更新。

请注意,您的代理可能不应该永远存在,并且绝对不应该轮询守护进程来进行工作。相反,您应该对其进行装配,以便在守护程序尝试连接到代理程序时,launchd启动代理程序。您可以通过让守护程序连接到launchd代表代理注册的Unix域套接字来完成此操作。

您可能会更好地了解Google的UpdateEngine如何处理软件更新。我相信它也有一个启动守护进程执行应用程序更新。由于这已经在许多计算机上运行,​​因此其软件更新问题的解决方案是经过验证的。 (Sparkle's解决方案也得到了彻底的证明,但它依赖于您似乎想要避免的用户交互。)

相关问题