2011-09-19 93 views
1

我有一个以超级用户上下文作为根运行的启动守护进程。该守护进程始终运行并监视服务器。有时,我的守护进程会从服务器获取一条命令,告诉它向用户显示某些内容。显然,我无法从启动守护进程执行此操作,因为它没有在“WindowsServer”环境中运行 - 所以另一个选项是为每个有权访问的用户生成单独的进程以显示GUI。从启动守护程序启动带有GUI的用户应用程序

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

虽然问题是这样的:服务器有时会提供实际二进制文件的更新。因此,服务器会向启动守护程序发送一系列文件,这些文件预计将复制到现有文件的顶部。如果我运行了启动代理程序,如何关闭它以便代理程序本身可以更新?同样,如何在更新完成后启动代理备份?

回答

0

即兴,我会说,你应该安排你的守护进程请求启动代理退出的需求,你会安排它按需启动相同的方式方法。一旦知道代理已经退出,守护进程就可以继续进行更新。

请注意,您的代理可能不应该永远活着,它绝对不应该投票守护进行工作。相反,您应该配置它,以便当守护程序试图连接到代理时,launchd启动代理。例如,您可以通过让守护程序连接到代表launchd的代理程序注册的Unix域套接字来实现此目的。

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