在Windows上使用jpackage生成的安装程序会创建不可运行的可执行文件



我使用jpackage将jar文件打包到windows安装程序中:

"C:Program FilesJavajdk-17.0.5binjpackage"
--name test-installer
--input .
--main-jar test.jar
--runtime-image ../jre1.8.0_341/
--main-class com.xxxxx.Main
--win-console

给我test-installer.exe。安装后,可执行文件无法运行。

控制台输出给出:

Error: Registry key 'SoftwareJavaSoftJava Runtime Environment'CurrentVersion'
has value '1.8', but '' is required.
Error: could not find java.dll
Error: Could not find Java SE Runtime Environment.

如果有帮助,这里是WinDbg输出

************* Path validation summary **************
Response                         Time (ms)     Location
Deferred                                       srv*
Symbol search path is: srv*
Executable search path is: 
ModLoad: 00007ff6`7b7d0000 00007ff6`7b841000   jpackageapplauncher.exe
ModLoad: 00007ffa`7d980000 00007ffa`7db89000   ntdll.dll
ModLoad: 00007ffa`7cf90000 00007ffa`7d04d000   C:WINDOWSSystem32KERNEL32.DLL
ModLoad: 00007ffa`7b0e0000 00007ffa`7b45c000   C:WINDOWSSystem32KERNELBASE.dll
ModLoad: 00007ffa`7c950000 00007ffa`7cafd000   C:WINDOWSSystem32USER32.dll
ModLoad: 00007ffa`7ae60000 00007ffa`7ae86000   C:WINDOWSSystem32win32u.dll
ModLoad: 00007ffa`7d4a0000 00007ffa`7d4c9000   C:WINDOWSSystem32GDI32.dll
ModLoad: 00007ffa`7b6f0000 00007ffa`7b809000   C:WINDOWSSystem32gdi32full.dll
ModLoad: 00007ffa`7b5d0000 00007ffa`7b66d000   C:WINDOWSSystem32msvcp_win.dll
ModLoad: 00007ffa`7af00000 00007ffa`7b011000   C:WINDOWSSystem32ucrtbase.dll
ModLoad: 00007ffa`7c040000 00007ffa`7c7f8000   C:WINDOWSSystem32SHELL32.dll
(3eb4.dfbc): Break instruction exception - code 80000003 (first chance)
ntdll!LdrpDoDebuggerBreak+0x30:
00007ffa`7da5cef4 cc              int     3
0:000> g
ModLoad: 00007ffa`7d1f0000 00007ffa`7d221000   C:WINDOWSSystem32IMM32.DLL
ModLoad: 00007ffa`7c800000 00007ffa`7c8ea000   C:WINDOWSSystem32shcore.dll
ModLoad: 00007ffa`7b990000 00007ffa`7ba2e000   C:WINDOWSSystem32sechost.dll
ModLoad: 00007ffa`79f50000 00007ffa`79f68000   C:WINDOWSSYSTEM32kernel.appcore.dll
ModLoad: 00007ffa`7d140000 00007ffa`7d1e3000   C:WINDOWSSystem32msvcrt.dll
ntdll!NtTerminateProcess+0x14:
00007ffa`7da24104 c3              ret

我不明白,这里的jpackage是什么?使用install4j的试用版制作的安装程序。

我做错了什么?有什么想法吗?

查看您正在使用的jpackage命令,看起来您正在尝试使用Java 8 JRE作为运行时映像:

--runtime-image ../jre1.8.0_341/

这不可能。正如您所发现的,它会导致无法启动的运行时映像损坏。Java 8 JRE并不是这样设计的。

一般来说,传递给--runtime-image的运行时映像应该使用jlink工具从与jpacakge相同的JDK制作。

最新更新