今天我在MacOs上遇到了一个奇怪的问题。我希望我能够完全解释理解的前提条件。我们使用的是install4j版本6.0.1。
我们的应用程序使用install4j静默更新检查应用程序作为主要“启动器”来实现,以在我们的应用程序启动过程中检查更新。此应用程序完全由install4j IDE配置。它检查是否存在更新,并为此下载新安装程序并执行它。这工作正常。如果应用程序是最新的,那么“主”应用程序启动器将由Execute Launcher
- 动作执行。因此,“extraCommandLineArguments”将传递给启动器,应用程序将启动。这也很好,参数将正确传递给我们的主类。
现在奇怪的行为:当我在第一个实例期间使用多个参数启动应用程序两次总是运行时,参数将不会传递给第一个实例,也不会创建第二个实例。启动器由install4j配置为允许应用程序的多个实例,单实例选项由我们的应用程序本身实现。因此,main-class检查实例是否始终在运行,并将参数传递给第一个实例。现在似乎永远不会创建第二个实例,因为我无法在调试模式下通过IDE连接到vm-process。因此,我将debug vm参数设置为vmoption文件。我尝试了几个选项来启动第二个实例:
对于所有选项,正在运行的实例将获得焦点但不接收任何参数,并且我无法通过IDE附加第二个进程来调试行为。看来我们的应用程序(主类)不会再次执行。在Info.plist
文件中,MacLauncher
类被识别为主类。是否实现了任何逻辑来搜索正在运行的实例并忽略第二个?
奇怪的是:在Windows上一切正常。第二个进程将参数传递给正在运行的实例。有什么不同的mac?如何检查install4j是否正在调用在启动器中配置的主应用程序类?有没有调试选项?
提前感谢您的帮助。
答案 0 :(得分:0)
在Mac OS X上,默认情况下GUI应用程序处于单实例模式。这是Mac OS X桌面环境的属性。打开第二个实例的唯一方法是调用
open -n my.app