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

osx – 如何在Mac上的沙箱中启动另一个进程?,第1张

概述我想在Mac上的Sandbox中推出LSOpenApplication()的另一个应用程序. 当然,我在启动的授权文件中添加了一行到’com.apple.security.temporary-exception.files.absolute-path.read-write’. 但是,当启动时,控制台发出一个错误,它不允许进程xxxx启动“foo.app”,因为它以前没有被用户启动. 手动启动一次后 我想在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的内容,因此您可以删除该权限.

作为一个沙盒应用程序,您实际上可以启动子系统是非常有限的,这是一个有意的行为,因为启动另一个应用程序在技术上是违反沙箱模型的.您可以使用的方式是:

>在您的应用程序中包含xpc服务,并启动它为您启动
>您可以通过NSTask运行应用程序,这将导致此应用程序在启动时继承您的沙箱
>您可以按名称启动应用程序,但是从我所看到的一般情况来看,这通常仅在应用程序位于/ Applications文件夹中时才起作用,即 – [NSWorkspace launchApplication:]
>您可以启动包含应用程序的应用程序,但只有当您已经使用SMLoginItemSetEnabled()

我会说osascript调用工作,因为它的做法大致相同 – [NSWorkspace launchApplication:].没有接受捆绑标识符或绝对/相对路径的LS呼叫都可以正常工作.

总结

以上是内存溢出为你收集整理的osx – 如何在Mac上的沙箱中启动另一个进程?全部内容,希望文章能够帮你解决osx – 如何在Mac上的沙箱中启动另一个进程?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1018332.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存