gpt4 book ai didi

macos - 苹果操作系统 X : Launching an app using NSWorkspace from a daemon doesn't work if the daemon is run as root

转载 作者:行者123 更新时间:2023-12-05 00:59:00 31 4
gpt4 key购买 nike

我使用 Xcode 创建了一个命令行工具应用程序。在那个应用程序中,我使用 NSWorkspace 来启动另一个应用程序包 (.app),如此处建议的那样。 MacOsX: How to launch an application (.app) from a "Command Line Tool" type of app

在我尝试使用 launchctl 将命令行工具应用程序作为守护进程启动之前,一切似乎都运行良好。如果守护进程以当前登录用户身份运行,则命令行工具应用程序可以正常启动外部应用程序。如果守护程序以根用户身份运行,则命令行工具应用程序无法启动外部应用程序。如果守护程序以 root 身份运行,则使用 NSWorkspace 打开应用程序似乎不起作用。

有谁知道从以 root 身份运行的守护进程打开另一个应用程序的正确方法?

最佳答案

这可能是您遇到的 MacOS 中的安全限制。

我建议做的是创建一个代码签名的“帮助工具”,它将自身重置为当前登录用户的用户 ID(通过 setuid —— 我不会在代码签名的应用程序之外这样做),然后执行 NSWorkspace 技巧以在该用户上下文中启动应用程序。

不过,创建辅助工具并非易事。宏伟的概念在 Apple 的 Authorization Services Programming Guide 中有所描述。 .

看看Apple's "SMJobBless" sample code ,它展示了如何安装您可以设置用户权限的帮助工具,然后修改它的帮助工具代码以启动您的应用。

关于macos - 苹果操作系统 X : Launching an app using NSWorkspace from a daemon doesn't work if the daemon is run as root,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15514259/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com