Настройте Launch4J на использование только 32-разрядной JVM
Я использую Launch4J для запуска своего приложения Java, и если в системе присутствует x64 JRE, Launch4J, похоже, предпочитает его.
К сожалению, мое приложение не может работать на 64-битной JVM, потому что я загружаю 32-битную DLL, что невозможно и приводит к UnsatisfiedLinkError.
Есть ли способ заставить/обмануть Launch4J, чтобы использовать только 32-битную JVM?
Ответы
Ответ 1
У меня была эта точная проблема около года назад, используя Lauch4J для обертывания небольшой Java-программы, для которой требуется 32-разрядная DLL (swt-win32.dll, как это было).
Я обнаружил, что если бы были установлены 32-разрядные и 64-разрядные JVM, Launch4J всегда будет поддерживать 64-разрядную версию. Это будет работать, только если 64-разрядная JVM будет удалена, что, очевидно, не является практическим решением.
Я не нашел способа заставить Launch4J предпочесть (и потребовать) 32-разрядную JVM, после довольно многого поиска и размещения вопросов на своем форуме.
Поэтому я оценил большое количество альтернативных JRE-конвертеров (я использовал этот список: http://www.excelsior-usa.com/articles/java-to-exe.html).
Я закончил работу над Jar2Exe, который был единственным, у которого были функции, в которых я нуждался. Это не бесплатно, хотя есть оценочная версия, и я думаю, что это было не дорого.
Надеюсь, это поможет!
Ответ 2
У меня точно такая же проблема: в среде с 64 битами, если установлены 32 и 64-разрядные JDK/JRE, эти инструменты всегда определяют версию 64 бит.
Я исправил исходный код (java + С++), чтобы сделать свою собственную версию и перекомпилировать все. Я добавляю флажок для FOR 32-разрядного обнаружения JDK/JRE в среду с 64-битными окнами.
Просто загрузите версию и используйте ее как оригинальную.
Версия: launch4j-3.0.2-win32_Java32bitsDetection
Ответ 3
Я не знаю Launch4J, но вы можете получить информацию о 32/64, прочитав System.getProperty("os.arch");
. Если вы столкнулись с 64-разрядной системой, вы можете выйти из программы установки с хорошим сообщением, чтобы сообщить Пользователю установить 32-разрядную JVM.
Вы можете обернуть свой startUp-код с помощью Wrapper, чтобы показать пользователю окно с сообщениями.
public static void main(String[] args]){
String architecture = System.getProperty("os.arch");
// Did not test the return value of this property,,but should work
if("64".equals(architecture)){
// Show a dialog, or print a logmessage
System.exit(-1);
}
// Start my APP
com.something.startup.main(args);
}
Ответ 4
Если вы не возражаете, включая копию JDK с вашим приложением, попробуйте передать эти аргументы (в MyApp.ini) на launch4j:
-D32 -Djava.home=d:\MyApp\JDK32 -Djava.ext.dirs=d:\MyApp\JDK32\jre\lib\ext
Здесь также есть другие вещи, которые вы можете использовать:
Если вы не упакуете JRE, вы можете установить параметр Launch4j для использования "jreOnly", а затем, используя переменную окружения DOS под названием "% ProgramFiles%", вы можете найти 32-битную или 64-битную JRE в ожидаемом месте, в зависимости от того, использовалась ли 32-разрядная оболочка cmd.exe SysWOW64 или обычная 64-разрядная оболочка. Затем вы можете передать эти параметры в JVM:
-D32 -Djava.home=%ProgramFiles%\Java\JREDIR -Djava.ext.dirs=%ProgramFiles%\Java\JREDIR\lib\ext
или
-D32 -Djava.home=%ProgramFiles(x86)%\Java\JREDIR -Djava.ext.dirs=%ProgramFiles(x86)%\Java\JREDIR\lib\ext
Ответ 5
Я столкнулся с той же проблемой некоторое время назад и разветкил проект, так что пользовательский интерфейс предоставляет возможность принудительно установить 32-битную JVM, вы можете захватить установщик launch4j 3.0.3 с помощью патча из:
http://fbergmann.github.io/launch4j/files/SetupLaunch4j_3.0.3.exe
и читайте здесь:
http://frank-fbergmann.blogspot.de/2012/11/launch4j-for-32bit.html
http://fbergmann.github.io/launch4j/
Ответ 6
При настройке вам придется добавить параметр JVM.
В следующем сообщении показано, как его добавить:
http://www.technimi.com/index.php?do=/group/java/forum/building-an-exe-using-launch4j-for-32-bit-jvm/
Ответ 7
Для любых пользователей приложений Launch4j, таких как Areca, которые страдают от этого, и нуждаются в быстрой работе, посмотрите в каталоге, в котором запущено приложение, и вы найдете полную командную строку java для запуска вашей программы в файле с именем launch4j.log. Просто создайте файл bat или script с помощью java vm, который вы предпочитаете, и запустите его с полной командной строкой в журнале.
Ответ 8
Это старый вопрос, и Launch4J обновлен с момента его запроса. Теперь есть специальный пользовательский интерфейс для выбора, какая версия JVM предпочтительнее.
Возможные варианты:
- Только 64-разрядная версия
- Первые 64-битные, затем 32-разрядные
- Первый 32-разрядный, затем 64-разрядный
- Только 32-разрядная версия
Последнее, конечно же, именно то, что запросил OP.
![Launch4J JVM Selection Dialog]()