c - C 程序如何判断它是否是从 Finder 启动的?

标签 c macos directory program-entry-point finder

标题说明了一切:

我想知道是否有任何 _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/

相关文章:

c - 随机数组选择

python - 如何在 mac osx 上通过 python 代码打开 url

svn - 替换 Subversion 文件夹并保留历史记录

Java: "Cannot refer to a non-final variable inside an inner class [...]",OS X 和 Windows 之间的区别

macos - 在OS X Mavericks上使用Network Link Conditioner出现问题

c - 我如何在 c 中为以下要求创建递归目录?

python - 使用 pygame 将整个文件夹包含在 cx_Freeze 中

c++ - 如何调用多个slave进行Spi数据传输?

c++ - C/C++ 中的衍生物?

c++ - 我们应该在子进程中使用退出还是返回