Встраивание 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