Java 仅为安装程序和应用程序将jre嵌入WInrun4j一次

Java 仅为安装程序和应用程序将jre嵌入WInrun4j一次,java,winrun4j,Java,Winrun4j,为了安装我的Windows桌面应用程序,我使用izpack创建了一个安装程序,然后使用winrun4j从exe调用它,这也是izpack安装的一部分。在安装后,添加另一个winrun4j包装器以实际运行应用程序 问题在于,要使win4runj.exe正常工作,它需要使用正确的Java类型,即如果exe为64位,它必须运行64位jvm,如果exe为32位,它必须运行32位jvm。这可能会让用户感到困惑,因此我打算利用winrun4j使用嵌入式jvm,然后提供两个下载 widgetinstalle

为了安装我的Windows桌面应用程序,我使用izpack创建了一个安装程序,然后使用winrun4j从exe调用它,这也是izpack安装的一部分。在安装后,添加另一个winrun4j包装器以实际运行应用程序

问题在于,要使win4runj.exe正常工作,它需要使用正确的Java类型,即如果exe为64位,它必须运行64位jvm,如果exe为32位,它必须运行32位jvm。这可能会让用户感到困惑,因此我打算利用winrun4j使用嵌入式jvm,然后提供两个下载

  • widgetinstaller.exe(32位)
  • widgetinstaller64.exe(64位)
但我的困惑是,对于每次下载,我只想嵌入jvm一次,但无法解决如何做到这一点,因为我有两个EXE(安装程序和程序本身),这可以做到吗

更新

如果我安装JVM两次(一次是在使用izpack构建时包含在install.jar中,一次是添加到zip文件以便widgetinstaller.exe使用),它就可以工作了

  • widgetinstaller.exe驻留在c:\code\widget\installer中
  • 从Oracle下载32位jre
  • 安装到c:\code\widget\32bitJVM中
  • 编辑izpack.xml,添加
  • 将安装程序vm.location=32bitJVM/bin/client/JVM.dll添加到c:\code\widget\installer\widgetinstaller.ini
  • 将小部件本身的vm.location=../32bitJVM/bin/client/JVM.dll添加到c:\code\widget\widget.ini
  • 重新生成代码,并在zip文件中包含32bitJVM以创建widgetinstaller.zip(其中包含32bitJVM、widgetinstaller.ini、widgetinstaller.exe、widgetinstaller.ico和install.jar)
  • 解压缩并双击widgetinstaller.exe进行安装
但是我只需要JVM一次,我知道我需要从izpack.xml中删除
,但是我如何将我的32位JVM复制到程序安装文件夹中呢

同一个JVM需要保存到程序文件夹。

似乎这必须在izpack之外完成

编辑

解决方案是使用Izpack松散包装,如中所述

但是,必须为路径设置什么是相当令人困惑的,文档错误地暗示了您放置了一个相对链接

示例

izpack install.xml位于C:\code\Widget\installer中

<pack name="Base" loose="true" required="yes" preselected="yes">
   <description>JVM</description>
   <file src="C:\Code\Widget\JVM" targetdir="$INSTALL_PATH"/>
</pack>

如果JVM嵌入到安装程序中,则程序无法使用它。 同样,如果JVM嵌入到程序中,则安装程序无法使用它

但是,您仍然可以只使用一个JVM来完成。这是通过将JVM复制到本地文件来实现的

因此,当您使用winrun4j启动安装程序时,它将从嵌入式JVM启动,然后在安装结束时,需要将相同的JVM保存到程序文件夹中

然后,程序winrun4j exe可以使用保存到文件夹中的JVM来启动程序,方法是将winrun4j中的“vm.location”设置为保存的JVM的位置

Process:
1) Run the installer exe with the required JVM
2) During the installation save the embedded JVM to a file
3) Once the instillation is complete the program exe can launch using the saved JVM

谢谢你的回答,现在就尝试一下,(我认为它可以工作,但那是因为我的安装程序可以在安装程序之外找到JVM),但我不知道如何将安装时使用的JVM复制到程序文件夹中,以便实际程序可以使用。JVM应该是一项非常简单的任务,源文件夹是JVM所在的位置,目标文件夹是运行程序需要放置JVM的位置。查看复制文件夹和文件的示例:是的,谢谢。我知道如何用Java复制文件,但我不知道如何从安装程序中调用此复制例程。此外,如果副本不在安装程序中,它将查找已挂起的用户,因为加载JVM文件夹需要一些时间,并且不会链接到进度条。使用Izpack松散包管理最后一部分的工作。
Process:
1) Run the installer exe with the required JVM
2) During the installation save the embedded JVM to a file
3) Once the instillation is complete the program exe can launch using the saved JVM