Install4j Mac:将命令行参数附加到Mac上正在运行的应用程序失败

Install4j Mac:将命令行参数附加到Mac上正在运行的应用程序失败,install4j,Install4j,今天我在MacOs上遇到了一个奇怪的问题。我希望我能准确地解释理解的前提条件。我们使用的是install4j版本6.0.1 我们的应用程序是使用install4j静默更新检查应用程序作为主“启动器”来实现的,用于在应用程序的启动过程中检查更新。此应用程序完全由install4j IDE配置。它检查是否存在更新,并为此下载新的安装程序并执行它。那很好。如果应用程序是最新的,“主”应用程序启动器将由执行启动器操作执行。因此,“extraCommandLineArguments”将传递给启动器,应用程

今天我在MacOs上遇到了一个奇怪的问题。我希望我能准确地解释理解的前提条件。我们使用的是install4j版本6.0.1

我们的应用程序是使用install4j静默更新检查应用程序作为主“启动器”来实现的,用于在应用程序的启动过程中检查更新。此应用程序完全由install4j IDE配置。它检查是否存在更新,并为此下载新的安装程序并执行它。那很好。如果应用程序是最新的,“主”应用程序启动器将由执行启动器操作执行。因此,“extraCommandLineArguments”将传递给启动器,应用程序将启动。这也很好,参数将正确地传递给我们的主类

现在有一个奇怪的行为:当我在第一个实例运行期间用几个参数启动应用程序两次时,参数将不会传递给第一个实例,也不会创建第二个实例。启动器由install4j配置为允许应用程序的多个实例,单实例选项由应用程序本身实现。因此,主类检查实例是否始终在运行,并将参数传递给第一个实例。现在似乎永远不会创建第二个实例,因为我无法在调试模式下通过IDE连接到vm进程。因此,我将调试vm参数设置为vmoption文件。我尝试了几个选项来启动第二个实例:

  • 使用“updater”应用程序正常执行我们的应用程序,并设置命令行参数
  • 通过启动器可执行文件直接执行我们的应用程序,并设置命令行参数
  • 通过调用启动器的JavaApplicationStub并将命令行参数传递给它来执行我们的应用程序
对于所有选项,正在运行的实例将获得焦点,但不接收任何参数,并且我无法通过IDE附加第二个进程来调试该行为。我们的应用程序(主类)似乎不会再次执行。在
Info.plist
文件中,有
MacLauncher
类被识别为主类。tere是否实现了搜索正在运行的实例而忽略第二个实例的逻辑

奇怪的是:在windows上,一切都很好。第二个进程将参数传递给正在运行的实例。mac上会有什么不同?如何检查install4j是否正在调用在启动器上配置的主应用程序类?有调试选项吗


提前感谢您的帮助。

在Mac OS X上,GUI应用程序默认处于单实例模式。这是Mac OS X桌面环境的属性。打开第二个实例的唯一方法是调用

open -n my.app

嗯,但是对于我们的应用程序的早期版本和install4j版本5.1.15,在没有您提到的选项的情况下,它已经可以工作了。另一个问题:如何将您的解决方案传递给install4j中的
执行启动器
操作?我不确定在这方面会有什么变化。为了捕获后续调用的命令行参数,您可以使用api中的
com.install4j.api.launcher.StartupNotification
类。install4j中的操作不能执行open-n