Настройте 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/

Ответ 7

Для любых пользователей приложений Launch4j, таких как Areca, которые страдают от этого, и нуждаются в быстрой работе, посмотрите в каталоге, в котором запущено приложение, и вы найдете полную командную строку java для запуска вашей программы в файле с именем launch4j.log. Просто создайте файл bat или script с помощью java vm, который вы предпочитаете, и запустите его с полной командной строкой в ​​журнале.

Ответ 8

Это старый вопрос, и Launch4J обновлен с момента его запроса. Теперь есть специальный пользовательский интерфейс для выбора, какая версия JVM предпочтительнее. Возможные варианты:

  • Только 64-разрядная версия
  • Первые 64-битные, затем 32-разрядные
  • Первый 32-разрядный, затем 64-разрядный
  • Только 32-разрядная версия

Последнее, конечно же, именно то, что запросил OP.

Launch4J JVM Selection Dialog