gpt4 book ai didi

macos - 如何在Mac上的沙箱中启动另一个进程?

转载 作者:行者123 更新时间:2023-12-03 16:04:38 34 4
gpt4 key购买 nike

我想在 Mac 上的 Sandbox 中通过 LSOpenApplication() 启动另一个自己的应用程序。

当然,我在启动授权文件的“com.apple.security.temporary-exception.files.absolute-path.read-write”中添加了一行。

但是,启动时,控制台抛出错误,不允许进程 xxxx 启动“foo.app”,因为用户之前尚未启动它。手动启动一次进程后即可正常启动。

即使之前没有启动过,如何启动该进程?这和沙箱没有关系吗?

最佳答案

在极少数情况下,您能够启动另一个应用程序并获得所需的结果。 com.apple.security.temporary-exception.files.absolute-path.read-write 不会为您带来任何与 LaunchServices 相关的信息,因此您可以删除该权利。

作为沙盒应用程序,您实际上可以子启动的内容相当有限,这是一种故意行为,因为启动另一个应用程序在技术上违反了沙盒模型。您可以选择的方式有:

  1. 在您的应用程序中包含 XPC 服务并已为您启动
  2. 您可以通过 NSTask 运行应用程序,这将导致该应用程序在启动时继承您的沙箱
  3. 您可以按名称启动应用程序,但据我所知,这通常仅在应用程序位于您的/Applications 文件夹中时才有效,即 -[NSWorkspace launchApplication:]
  4. 您可以启动包含您的应用程序的应用程序,但前提是您已启用 SMLoginItemSetEnabled()

我想说 osascript 调用有效,因为它的功能与 -[NSWorkspace launchApplication:] 大致相同。接受包标识符或绝对/相对路径的 LS 调用都不会起作用。

关于macos - 如何在Mac上的沙箱中启动另一个进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12594380/

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