Mac 应用程序包能够启动多个实例

Posted

技术标签:

【中文标题】Mac 应用程序包能够启动多个实例【英文标题】:Mac application bundle able to launch multiple instances 【发布时间】:2015-02-16 09:05:08 【问题描述】:

问题:如何创建一个可以默认打开多个实例的Mac应用程序?

通常,Mac 应用程序包维护一个 Mac 程序实例。也就是说,如果我双击“VLC”,它将打开 VLC 程序。如果我再次双击,它将把以前的 VLC 窗口带到前台;它不会打开 VLC 的新实例。但是如果我在 VLC 上运行“open -n”,它会强制 VLC 打开第二个实例。

我正在创建一个 Mac 应用程序包,并希望用户第二次双击以启动该应用程序的第二个实例。我找不到在 Info.plist 中使用的任何相关键。有什么想法吗?

【问题讨论】:

XCode ?吗?爪哇? ... ? 使用 Oracle 的 AppBundler 捆绑的 Java 应用程序:java.net/projects/appbundler。在执行启动的 .app/Contents/MacOS 中生成“JavaAppLauncher”二进制文件。 JavaAppLauncher 二进制文件的创建发生在 main.m 中:java.net/projects/appbundler/sources/svn/show/appbundler/… JavaAppLauncher 是一个通用的 Mac 二进制启动器,它解析来自 Info.plist 的选项,然后使用这些选项启动 Java。它的源代码在这里:java.net/projects/appbundler/sources/svn/show/appbundler/…。我假设 Launcher 的相关性较低,并且应该有一种方法可以在 Bundle 级别控制这种单实例行为。这就是为什么我认为 Info.plist 中会有一个标志,但我没有看到任何相关内容。 【参考方案1】:

open -n 命令捆绑到应用程序包中的shell 脚本中,并让它启动您的主应用程序。

【讨论】:

偶然发现这个试图做类似的事情。当直接从终端调用 shell 脚本时,它似乎可以工作。在 shell 脚本的 info.plist 中指向 CFBundleExecutable 似乎不起作用。双击 finder 中的图标仍然只启动一个实例。似乎 macos 故意停止这种解决方法。

以上是关于Mac 应用程序包能够启动多个实例的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mac 上启动多个 MonoDevelop 实例?

启动多个mysql实例

单个应用程序中有多个 QJSEngine 实例?

在 Mac OS X 上运行同一应用程序(Firefox、Opera 等)的多个实例?

Apache Spark 启动多个 SparkContext 实例

如何在 Mac 系统上同时打开多个 MediaInfo 应用程序实例?