【问题标题】:Embedding a jre into WInrun4j only once for installer and application只为安装程序和应用程序将 jre 嵌入 WInrun4j 一次
【发布时间】:2012-08-22 01:34:57
【问题描述】:

为了安装我的 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,添加<file src="C:/code/widget/JVM32bit" targetdir="$INSTALL_PATH"/>
  • 将安装程序 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中删除<file src="C:/code/widget/JVM32bit" targetdir="$INSTALL_PATH"/>,但是我如何将我的32bitJVM复制到程序安装文件夹中

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

似乎这必须在 izpack 本身之外完成?

编辑

解决方案是使用 Can I install a file using Izpack 5 without it being part of the install.jar built by izpack 中描述的 Izpack 散装包

但是必须为路径设置的内容非常令人困惑,文档错误地暗示您输入了相对链接http://izpack.org/documentation/installation-files.html#the-packs-element-packs

示例

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>

打包时izpack安装应该有:

JVM
install.jar
setup.exe

【问题讨论】:

    标签: java winrun4j


    【解决方案1】:

    如果安装程序中嵌入了 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 以运行程序的位置。请参阅此复制文件夹和文件的示例:mkyong.com/java/how-to-copy-directory-in-java
    • 是的,谢谢我知道如何在 Java 中复制文件,但我不知道如何从安装程序中调用此复制例程。而且,如果副本不在安装程序中,它会查看已挂起的用户,因为加载 JVM 文件夹需要一些时间,并且不会链接到进度条。
    • 使用 Izpack 散装包设法让最后一部分工作。
    猜你喜欢
    • 2020-01-04
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多