【发布时间】:2015-05-21 04:04:49
【问题描述】:
今天我在 MacOs 上遇到了一个奇怪的问题。我希望我能准确地解释前提条件以供理解。我们使用的是 install4j 版本 6.0.1。
我们的应用程序使用 install4j 静默更新检查应用程序作为主要“启动器”来实现,以在我们的应用程序启动过程中检查更新。此应用程序完全由 install4j IDE 配置。它检查是否存在更新,并为此下载新的安装程序并执行它。这工作正常。如果应用程序是最新的,“主”应用程序启动器将由Execute Launcher-action 执行。因此,“extraCommandLineArguments”将被传递给启动器并启动应用程序。这也很好,参数将正确传递给我们的主类。
现在奇怪的行为:当我在第一个实例始终运行期间使用多个参数启动应用程序两次时,参数不会传递给第一个实例,也不会创建第二个实例。启动器由 install4j 配置以允许应用程序的多个实例,而单实例选项由我们的应用程序本身实现。因此主类检查一个实例是否一直在运行,并将参数传递给第一个实例。现在似乎永远不会创建第二个实例,因为我无法在调试模式下通过 IDE 附加到 vm-process。因此,我将调试 vm 参数设置为 vmoption 文件。我尝试了几个选项来启动第二个实例:
- 使用“updater”-应用程序正常执行我们的应用程序并设置命令行参数
- 通过launcher-executable直接执行我们的应用程序并设置命令行参数
- 通过调用启动器的 JavaApplicationStub 并将命令行参数传递给它来执行我们的应用程序
对于所有选项,正在运行的实例将获得焦点但不接收任何参数,并且我无法通过 IDE 附加第二个进程来调试行为。看来我们的应用程序(主类)不会被第二次执行。在Info.plist 文件中,MacLauncher 类被识别为主类。是否实现了任何逻辑来搜索正在运行的实例并忽略第二个?
奇怪的是:在 Windows 上一切正常。第二个进程将参数传递给正在运行的实例。 mac上有什么不同?如何检查 install4j 是否正在调用我们在启动器中配置的主应用程序类?是否有任何调试选项?
提前感谢您的帮助。
【问题讨论】:
标签: install4j