如何将 JRE 捆绑到 Java 应用程序的 EXE 中?Launch4j表示“运行时丢失或损坏”。

2022-09-01 03:14:29

我是Java编程的新手,但通常熟悉一切工作原理。我希望能够将jar文件和jre都放入Windows可执行文件(exe)中,这样当我分发它时,客户端就不需要安装JRE。我应该使用什么程序?

我有launch4j,它似乎完全按照我想要的做,但是当我尝试运行应用程序时,我得到“此应用程序被配置为使用捆绑的Java运行时环境,但运行时丢失或损坏。

我希望我的应用只是一个可运行的 exe,而不是一个安装程序。至少,任何人都可以向我展示如何正确地将JRE与launch4j捆绑在一起吗?


答案 1

我可以捆绑JRE的唯一方法是使用Launch4JInno Setup Compiler

首先,在与输出文件相同的目录中创建一个文件夹(例如.exe)。jre6

然后将 JRE 从系统复制到 jre6 文件夹中。

然后打开Launch4J并设置捆绑的JRE路径 - 只需键入.然后单击“生成”按钮(显然,在输入了所有其他参数之后 - 但是在 JRE 选项卡本身上需要输入的唯一值是捆绑的 JRE 路径值。jre6

我本来以为这可以工作,但是如果您随后将.exe移动到新位置(因此它不再与jre6文件夹位于同一位置),您将获得此应用程序配置为使用捆绑的Java运行时环境,但是当您尝试运行该应用程序时,运行时丢失或损坏错误...

我整天都在玩这个,我无法让Launch4J将JRE包含在.exe文件中。在我看来真的很差,因为他们的文档似乎根本没有提到这个问题。

所以我要解决的问题是使用Inno Setup Compiler(ISC)。此应用程序用于将.exe包装为Windows安装程序文件。因此,我向 ISC 脚本添加了一个设置,该设置将 JRE 复制到安装程序包中。我添加到脚本中的行(在本节中)是:[Files]

Source: "M:\Netbeans\MyApp\jre6\*"; DestDir: "{app}\jre6\"; Flags: recursesubdirs createallsubdirs

...有点解决方法,但它做到了。

重复上述所有步骤,您应该进行排序。


答案 2

将jre打包到exe的简单方法是使用pack。

warp-packer --arch windows-x64 --input_dir mycrt --exec run.bat --output single.exe

然后在启动exe时停止cmd窗口。

editbin /subsystem:windows

翘曲https://github.com/dgiagio/warp

编辑栏:由 VS 安装

演示:

enter image description here

enter image description here


推荐