jpackage 创建的应用程序在 Windows 上是否有更多安全限制?

问题描述 投票:0回答:1

我有一个 jpackage 创建的应用程序 (OpenJDK 20.0.2),我交付给 macOS、Linux 和 Windows。它适用于所有 3 个。我添加了一项“更新”功能,应用程序将检查服务器是否有更新的主 jar(例如 app.jar),如果存在,则将其下载到用户目录(例如 $HOME/app/ update/app.jar) 并制作应用程序安装程序 App.cfg 文件的副本,将 app.jar 的类路径替换为新文件所在的位置,并将更新的 cfg 文件放入平台的适当位置。例如。在 Linux 上,它将 cfg 文件放入 $HOME/.app/,在 macOS 上,将其放入 $HOME/Library/Application Support/app/,在 Windows 10 上,将其放入 $HOME/AppData/roaming/app /.

在 macOS 和 Linux 上,一切都按预期运行 - 即应用程序下载一个新的 jar,并且下次启动该应用程序时,它会使用该新的 jar。但在 Windows 上,我得到的只是一个小对话框,上面写着“无法启动 JVM”。如果我复制原始的 app.jar (将 C:\Program Files\App pp\ 放入下载更新的 app.jar 的目录中,应用程序将再次启动。如果我执行相反的操作(将我的更新应用程序放入.jar 进入安装目录),我看到“无法启动 JVM”对话框。我唯一的猜测是,在 Windows 中,存在某种 jar 的指纹,阻止更改的 jar 执行?

事实确实如此吗?如果没有,有没有办法调试这种情况? IE。我可以提供一些额外的配置信息或环境变量来查看有关应用程序无法启动 JVM 的原因的更多详细信息吗?

任何帮助表示赞赏。

附注注意:直到 JDK 19 才添加创建本地 CFG 文件的功能。有关详细信息,请参阅此问题

java windows-10 jpackage
1个回答
0
投票

问题的答案是“不”。事实证明(感谢@VGR建议我从命令行运行应用程序),我的应用程序在其 main() 函数中捕获了 NullPointerException 并在其 catch 块中写入了一条日志消息,然后执行了 System.exit (-1) 表示应用程序异常结束。

应用程序包装器显示的消息“无法启动 JVM”完全是错误且具有误导性的。:它没有启动 JVM 失败 - JVM 已启动并且我的应用程序运行,并且只是以 -1 退出代码退出。我将尝试创建一个简单的用例并使用 OpenJDK 提交错误报告。

抱歉浪费了大家的时间。

© www.soinside.com 2019 - 2024. All rights reserved.