【发布时间】:2012-09-19 18:31:51
【问题描述】:
我正在为 10.8+ 构建一个应用程序,其中必须修补文件。由于这个功能,我创建了一个“PrivilegedHelperTool”并安装为 KeepLive = YES RunAtLoad = YES(所以它一直在运行)。我还使用 XPC over mach 与 GUI 应用程序(菜单栏)进行通信
我希望能够检查“PrivilegedHelperTool”是否已安装并正在运行,到目前为止,我发现检查安装的最佳方法是在 /Library/LaunchDaemons/ 中查找 plist 并检查二进制文件位于 /Library/PrivilegedHelperTools 中。
这真的是最好的方法吗?
我还没有找到可靠的方法来检查 PrivilegedHelperTool(以 root 身份运行)是否已经是 root(例如 sudo launchctl list)
我添加了一个使用 launch.h (/usr/include/launch.h) http://brockerhoff.net/blog/2009/02/02/cocoa-musings-pt-3/ 的包装器 但它只返回用户进程并让最终用户提升权限只是为了检查某些“插件”是否正在运行似乎是错误的。
我所能期望的最好的结果是尝试与我的服务交谈,如果它没有响应,是否认为它“损坏或未运行”? (http://mac-os-forge.2317878.n4.nabble.com/Programmatic-interface-to-launchctl-and-some-other-questions-OS-X-10-5-tp189494p189496.html)
【问题讨论】:
-
在此处关注 Apple devforums.apple.com/message/731960#731960
-
这可能不是最好的解决方案,但我能想到的最简单的解决方案。既然你已经有了消息,为什么不使用那个呢?您向守护程序发送消息,并且守护程序返回您需要的信息(uid_t,等等)。如果它没有运行,守护进程将不会回复。另外,如果您不想依靠消息传递来了解它是否正在运行,也许 ps 的源代码可能会对您有所帮助。
-
我希望拥有比“释放载体 pidgin 并希望它返回”更精细的粒度控制。守护程序可能没有运行(不太可能) 守护程序可能正在运行但被删除(可能是边缘情况?)等。我宁愿知道一个守护程序没有运行并请求 sudo 来启动它,而不是假设最坏的情况并首先重新安装它故障征兆(XPC 消息未响应)
-
所以这不是真的“我还没有找到可靠的方法来检查 PrivilegedHelperTool(以 root 身份运行)是否已经是 root(例如 sudo launchctl list)”我的错误部分是因为我是过早地读取管道并错过了一堆,因为当我调试这个插件/守护进程时设置为 OnDemand = YES(当我在 cli 上时并不总是运行)ps 和解析输出是脏的,但应该足够了。跨度>
-
Apple 在他们的开发者论坛上回复了更多细节。 devforums.apple.com/message/732894#732894(需要苹果开发者账号)
标签: objective-c cocoa osx-lion macos-carbon launchd