Встраивание jre в WInrun4j только один раз для установщика и приложения

Для установки моего настольного приложения Windows я создаю установщик с помощью izpack, а затем вызываю его из exe-файла с помощью winrun4j, также в состав установки izpack добавляется еще одна оболочка winrun4j для фактического запуска приложения после его установки.

Проблема в том, что для того, чтобы win4runj.exe работал, он должен использовать правильный тип Java, то есть, если exe - 64-битный, он должен работать с 64-битной jvm, если exe - 32-битный, он должен работать с 32-битной jvm. Это может сбить пользователя с толку, поэтому я собирался воспользоваться winrun4j, чтобы использовать встроенный jvm, а затем сделать две загрузки доступными

  • widgetinstaller.exe (32-разрядная версия)
  • widgetinstaller64.exe (64-разрядная версия)

Но моя путаница заключается в том, что для каждой загрузки я хочу встраивать jvm только один раз, но не могу понять, как это сделать, потому что у меня есть два exe (установщик и сама программа), это можно сделать?

Обновить

Пусть он будет работать, если я установлю JVM дважды (один раз включенный в install.jar при сборке с izpack, и один раз добавленный в zip-файл, чтобы его мог использовать widgetinstaller.exe).

  • widgetinstaller.exe находится в c:\code\widget\installer
  • Скачать 32 bit JRE от Oracle
  • Установить в 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
  • Перестройте код и заархивируйте его, включая 32 bitJVM в zip-файле, чтобы создать widgetinstaller.zip (он содержит 32bitJVM, widgetinstaller.ini,widgetinstaller.exe, widgetinstaller.ico и install.jar)
  • Распакуйте и дважды щелкните на widgetinstaller.exe для установки

Но я хочу только JVM один раз, я знаю, что мне нужно удалить <file src="C:/code/widget/JVM32bit" targetdir="$INSTALL_PATH"/> из izpack.xml, но как мне скопировать 32 bitJVM в папку установки программы?

ту же JVM необходимо сохранить в папке с программой.

Кажется, это должно быть сделано за пределами самого izpack?

РЕДАКТИРОВАТЬ

Решение состоит в том, чтобы использовать свободные пакеты Izpack, описанные в разделе Могу ли я установить файл с помощью Izpack 5, не являясь частью install.jar, созданного izpack

но это довольно запутанно, что должно быть установлено для пути, документация неправильно подразумевает, что вы вставили относительную ссылку http://izpack.org/documentation/installation-files.html.

пример

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

1 ответ

Решение

Если JVM встроена в установщик, программа не сможет его использовать. И снова, если JVM встроена в программу, установщик не сможет ее использовать.

Однако вы все еще можете сделать это только с одной JVM. Это делается путем копирования JVM в локальный файл.

Поэтому, когда вы запускаете установщик с winrun4j, он запускается из встроенной JVM, а затем в конце установки тот же самый JVM должен быть сохранен в папке программы.

Ваша программа winrun4j exe может затем использовать JVM, которую вы сохранили в папке для запуска программы, вы делаете это, устанавливая "vm.location" в winrun4j как местоположение сохраненной 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
Другие вопросы по тегам