xcode - 从启动守护程序启动带有 GUI 的用户应用程序

标签 xcode macos cocoa

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

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

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

最佳答案

即兴地说,我想说你应该为你的守护进程安排一种方法来请求启动代理按需退出,就像你安排它按需启动一样。一旦您知道代理已退出,您的守护程序就可以继续更新。

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

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

关于xcode - 从启动守护程序启动带有 GUI 的用户应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7474848/

相关文章:

ios - 运行 iOS v13.3 的 iPhone Xs 未显示在 Mac OS Catalina v10.15.2 上 Safari v13.0.4 的开发菜单中

cocoa - NSTableView - 使用 NSSortDescriptor 对集合进行排序的更好解决方案

objective-c - 右键单击 OSX 新项目

ios - 使用 Swift 从 Parse 检索 "createdAt"和 "updatedAt"

xcode - 向 Storyboard 添加新的顶级 UIView 并保留其他 UIView 约束

Python - tcpdump 子进程挂起

objective-c - cocoa-为什么有一个 IBOutlet 和一个同名的属性?

ios - 将一些日期字符串转换为 NSDate

ios - 如何快速解决日历问题? (很高兴即使在 Objective-c 中也能看到)

objective-c - Cocoa:获取 WebView mainFrame html 字符串