繁体   English   中英

可执行文件是否总是在MacOS上打开终端窗口?

[英]Do executable files always open a terminal window on MacOS?

我在MacOS X上,对于应用程序捆绑类型的东西还很陌生。 我正在编写一个打开窗口并注册鼠标输入的程序-而不是命令行工具。 当我将代码(用C编写,如果很重要)编译为可执行文件(“ unix可执行文件”),然后直接运行该文件(例如,双击该文件)时,将弹出一个终端窗口,然后然后程序窗口弹出。 同样,如果我导航到可执行文件的目录并从命令行打开它,则它会先打开/ another /终端窗口,然后是程序窗口。

但是,如果我将可执行文件打包成一个包(因此,我想将其变成一个适当的“应用程序”),那么当我通过双击或从命令行运行该应用程序时,该程序的窗口将打开且没有新窗口终端窗口已创建。 这仅仅是“应用程序捆绑包”体系结构的一个属性吗? 还是有一种方法可以运行原始可执行文件而不会引起另一个终端窗口? 我怀疑我误解了一些基本知识。 提前致谢!

我相信您所看到的是正确的。 为了不弹出单独的窗口,您需要将其封装到一个包中。

双击捆绑包或使用Terminal中的“ open”命令启动 ,将使用Apple的Launch Services ,其中维护了已知(注册)应用程序的列表。 将应用程序(捆绑包)引入系统后,它会在Launch Services中注册并与其URI(例如com.apple.calculator)相关联,该URI出现在捆绑包的Info.plist中

Info.plist中的其他项告诉启动服务如何处理应用程序,例如检查是否已超过操作系统的最低或最高版本,或者是否显示停靠项。

一个单独的二进制文件没有关联的Info.plist清单,因此其行为无法更改,并且打开了Terminal窗口。

原始可执行文件在本质上被Launch Services(当您打开内容时Finder,Dock和open命令使用的框架)视为文档。 处理此类文档的应用程序是Terminal。 因此,当您以这种方式打开可执行文件时,如果可执行文件尚未运行,它将启动Terminal并告诉其打开文档。 终端通过打开一个新的shell窗口并以命令行自动键入“文档”的路径来实现此目的。

Launch Services还可以处理捆绑的应用程序。 如果该应用程序已经在运行,则将其激活,并可能会打开一个新的无标题窗口。 否则,它将启动它。

正如Rob Napier在评论中指出的那样,如果直接从命令行运行可执行文件(或者如果某些已经在运行的应用程序使用NSTask或fork + exec启动它),它将简单地运行。 不会涉及启动服务,因此不会要求终端将可执行文件作为文档打开。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM