通过启动获得根权限的帮助器工具无法建立到我的主程序的NSConnection。
当我使用sudo手动启动HelperTool时,连接可以正常工作,这证明我的服务得到了很好的维护,并且问题来自于启动。
日志为:
12.01.12 12:41:07 Debou[8247] [CaptureQueue startCaptureQueueThread] Launched NSConnection service Debou-CaptureQueueThread - (** NSConnection 0x100522090 receivePort <NSMachPort: 0x1005511d0> sendPort <NSMachPort: 0x1005511d0> refCount 1 **)
12.01.12 12:41:10 com.apple.launchd[1] System: Looking up service Debou-CaptureQueueThread
12.01.12 12:41:10 com.apple.launchd[1] (com.Debou.PacketTool[8260]) Mach service lookup failed: Debou-CaptureQueueThread 为什么launchd看不到我的自动售卖NSConnection?
发布于 2012-01-13 01:39:51
AIUI这是由于Mach命名空间层次结构造成的。您的主程序将在用户会话名称空间中注册它的NSConnection,而LaunchDaemon在全局上下文中运行,因此它看不到任何会话名称空间。请注意,当您使用sudo运行helper时,它仍然在会话上下文中运行,即使它是以root身份运行的。请参阅tn2083,特别是“执行上下文”和“守护进程IPC建议”部分。
您也许能够从LaunchDaemon提供连接并从主程序进行连接(因为会话名称空间继承自全局名称空间),但切换到完全不同的机制可能会更好。扮演奎因的“爱斯基摩人!”在this message中指出,在安全域之间使用分布式对象(如用户程序和作为根用户运行的守护进程)会使正确的输入验证变得非常困难,因此可能会导致安全错误。
https://stackoverflow.com/questions/8834864
复制相似问题