在沙盒式macOS应用程序中,是否可以通过编程方式终止其他应用程序



我正在Objective-C/Swift中编写一个沙盒macOS应用程序。我对以编程方式终止其他应用程序感兴趣。在Cocoa中,有一个NSRunningApplication类公开了以下方法:

- (BOOL)terminate;
- (BOOL)forceTerminate;

两种方法的文件都说:

沙盒应用程序不能使用此方法终止其他应用程序。从沙盒调用此方法时返回false应用

我习惯于隐藏苹果的文档,我在想:文档清楚地说,如果从沙盒应用程序调用,这个方法不能用来终止其他应用程序,但从措辞来看,他们暗示可能还有另一种方法。有人知道从沙盒应用程序中终止NSRunningApplication实例的方法吗?非常感谢你的帮助。

总的来说,我很确定答案是否定的。这会破坏沙箱的目的,而且我不认为有权访问流程服务或信号。

在某些特定情况下,您可以通过要求流程终止自身来终止另一个流程。例如,接受套接字连接的服务器可能有一个命令,它可以接受该命令作为其通信协议的一部分,该命令告诉它退出。显然,这将针对每一个这样的过程。

对于一般情况,我认为你需要删除沙盒功能,这意味着应用程序没有应用商店的位置——如果我没有错的话,苹果生态系统中唯一允许运行未沙盒应用程序的操作系统是macOS,所以除了Mac应用程序,即使是测试它也不可能正式实现。

然而,如果它是一个Mac应用程序,而你取消了它的收件箱,那么该应用程序将需要足够的权限来终止其他应用程序。这通常是通过创建一个特权助手工具来完成的,该工具需要使用SMJobBless来启动。您可以以特权运行应用程序本身,但出于安全原因,这是个坏主意。通常,您只希望实现需要提升权限的功能的部分实际拥有提升的权限,这意味着一个单独的过程。因此产生了辅助工具。

为提升权限设置帮助工具有点痛苦,但你可能会发现这个GitHub repo很有用(免责声明:这是我的另一个项目的分支(。

相关内容

最新更新