【发布时间】:2021-12-07 20:27:22
【问题描述】:
我正在使用 Jpackage 为我们的 java 应用程序开发 MSI 安装程序。
版本:
openjdk version "17.0.1" 2021-10-19
OpenJDK Runtime Environment Temurin-17.0.1+12 (build 17.0.1+12)
OpenJDK 64-Bit Server VM Temurin-17.0.1+12 (build 17.0.1+12, mixed mode, sharing
jpackage 17.0.1
OS Name: Microsoft Windows Server 2019 Datacenter
OS Version: 10.0.17763 N/A Build 17763
OS Manufacturer: Microsoft Corporation
OS Configuration: Standalone Server
OS Build Type: Multiprocessor Free
Jpackage 用法:
jpackage --input ./home ^
--name "Acme Application" ^
--main-jar app.jar ^
--main-class org.springframework.boot.loader.JarLauncher ^
--java-options "-splash:$APPDIR/splash.png" ^
--java-options -Xmx2g ^
--icon resources/package.ico ^
--win-shortcut ^
--win-menu ^
--type msi ^
--app-version %1
升级过程
安装工作正常,一切运行良好。升级过程在正常情况下也可以正常工作。当用户在应用程序仍在运行时尝试运行新的 MSI 包时,MSI 安装程序会提示用户在继续之前关闭应用程序:
选择关闭应用程序并继续会导致应用程序在用户桌面上关闭,但安装程序随后会使用相同的对话框再次提示用户。选择相同的选项(关闭并继续),允许安装程序完成,但随后会警告用户他们需要重新启动。
重新启动后,应用程序版本 1.0.0 似乎仍在运行。检查前后的jar文件签名显示安装程序覆盖原始文件失败。
事件查看器
查看事件查看器,我只看到了一些有趣的东西:
Windows Installer requires a system restart. Product Name: *******. Product Version: 1.0.1. Product Language: 1033. Manufacturer: Unknown. Type of System Restart: 1. Reason for Restart: 0.
和
The Windows Installer initiated a system restart to complete or continue the configuration of '*******'.
未能停止应用程序
我还注意到应用程序没有完全停止。查看任务管理器,它显示在用户下运行的应用程序,然后移动到后台进程。这让我相信它仍在锁定 jar 文件。应用程序在其他情况下正常停止,所以我不确定这里有什么不同。
我假设我需要解开这个谜团,但我不知道为什么应用程序在处理其他所有内容时不会响应安装程序的关闭信号。
【问题讨论】: