Macos 通过XPC与应用程序通信并启动以root用户身份运行的守护程序
是否可以通过XPC与以root用户身份运行的启动守护进程和应用程序通信?当我的守护进程以我的用户身份运行时,我可以很好地与它通信,当以root用户身份运行时,它停止接收我的消息。这是Mac OS X内部的预期安全性吗? 我需要使用低级别的xpc(用于在Lion上运行)。我知道我可以为我的应用创建一个以root用户身份运行的私有签名帮助工具。我是否能够通过XPC或套接字与另一个进程进行通信 谢谢 我的守护程序代码的小摘录:Macos 通过XPC与应用程序通信并启动以root用户身份运行的守护程序,macos,daemon,xpc,Macos,Daemon,Xpc,是否可以通过XPC与以root用户身份运行的启动守护进程和应用程序通信?当我的守护进程以我的用户身份运行时,我可以很好地与它通信,当以root用户身份运行时,它停止接收我的消息。这是Mac OS X内部的预期安全性吗? 我需要使用低级别的xpc(用于在Lion上运行)。我知道我可以为我的应用创建一个以root用户身份运行的私有签名帮助工具。我是否能够通过XPC或套接字与另一个进程进行通信 谢谢 我的守护程序代码的小摘录: int main() { Logger::Start(Poco::
int main()
{
Logger::Start(Poco::Path::expand("/Users/Shared/Me/Service.log"));
Logger::LogInfo("Starting xpc_main...");
void* observer = nullptr;
CFStringRef observedObject = CFSTR("com.me.service.close");
CFNotificationCenterRef center = CFNotificationCenterGetDistributedCenter();
CFNotificationCenterAddObserver(center, observer, notificationCallback, CFSTR("ClientClosing"), observedObject, CFNotificationSuspensionBehaviorDeliverImmediately);
xpc_connection_t listener = xpc_connection_create_mach_service("com.me.service", NULL, XPC_CONNECTION_MACH_SERVICE_LISTENER);
xpc_connection_set_event_handler(listener, ^(xpc_object_t event)
{
// New connections arrive here. You may safely cast to
// xpc_connection_t. You will never receive messages here.
// The semantics of this handler are similar to those of
// of the one given to xpc_main().
Logger::LogInfo("Event Handler on listener is called");
eventHandler((xpc_connection_t)event);
});
Logger::LogInfo("call xpc_connection_resume...");
xpc_connection_resume(listener);
CFRunLoopRun();
Logger::LogInfo("Main Program is Exiting...");
return 0;
}
问题是,cf通知中心GetDistributedCenter仅对同一用户有效,根用户不会向其他登录用户发送消息 您需要切换到cf通知中心GetDarWinNotifyCenter
但是请注意,您不能使用此中心传递任何数据。有人有什么想法吗?XPC不是必需的,只是希望有一个全局守护进程运行,它将能够与2个进程通信。这不是一个想法,但我目前处于类似的情况,不知道您是否可以提供指导。。。。我需要一个事件启动我的守护进程的方法。我的意思是我有一个网站,当一个BTN点击发生时,我想发送一条消息给守护进程执行。如有任何意见或建议,将不胜感激。