标题说明了一切:
我想知道是否有任何 _NSWasLaunchedFromFinder
类型的 API 或 Hook OS/X C 程序(int main(int argc, char* argv[])
variety)可以用来确定它是通过用户点击 Finder 中的可执行文件启动的,还是通过更传统的路径运行的(比如在终端中输入)。
最佳答案
如果您谈论的是普通命令行实用程序 - 无法确定它是从 Finder 还是在终端中启动,因为 Finder 将启动终端,然后在其中执行您的程序。
但是有一个解决方案。我宁愿称之为解决方法。您可以使用 bundle 包装您的可执行文件,创建简单的脚本(我们称之为 finderLauncher
),它将使用一些额外的命令行参数(例如 -launchedFromFinder
)启动实际的可执行文件。不要忘记使其可执行。比在您的 Info.plist 文件中将 finderLauncher
设置为 CFBundleExecutable
值。
现在在 Finder 中,用户将只能看到您的包,通过单击它,您的实际可执行文件将通过传递指定命令行参数的 finderLauncher
启动。相同的行为将通过在终端中使用 open
命令来实现。
如果直接从终端启动,则不会有 -launchedFromFinder 参数(当然,如果用户不直接传递它的话)。
附言在 Info.plist 中直接指定命令行参数会容易得多,但我在 Information Property List Key Reference 中找不到这样的键。尽管代理/守护进程有这样的 key 。
关于c - C 程序如何判断它是否是从 Finder 启动的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16048296/