Настройте Launch4J для использования только 32-битной JVM - PullRequest
10 голосов
/ 22 апреля 2010

Я использую Launch4J для запуска своего Java-приложения, и если в системе присутствует x64 JRE, Launch4J, похоже, предпочитает его.

К сожалению, мое приложение не может работать на 64-битной JVM, потому чтозагрузка 32-битной DLL, которая невозможна и приводит к UnsatisfiedLinkError.

Есть ли способ заставить / запустить Launch4J для использования только 32-битной JVM?

Ответы [ 8 ]

10 голосов
/ 27 сентября 2012

У меня точно такая же проблема: в 64-битной среде, если установлены оба 32-битных и 64-битных JDK / JRE, эти инструменты всегда обнаруживают 64-битную версию. Я исправил исходный код (Java + C ++), чтобы сделать свою собственную версию и перекомпилировать все. Я добавляю флажок, чтобы FORCE 32-битное обнаружение JDK / JRE в 64-битной среде Windows. Просто загрузите версию и используйте ее как оригинальную.

Версия: launch4j-3.0.2-win32_Java32bitsDetection

5 голосов
/ 09 ноября 2010

У меня была именно такая проблема около года назад, когда я использовал 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, который был единственным, у которого были нужные мне функции. Это не бесплатно, хотя есть ознакомительная версия, и я думаю, что это не дорого.

Надеюсь, это поможет!

1 голос
/ 02 февраля 2018

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

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

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

Launch4J JVM Selection Dialog

1 голос
/ 11 апреля 2013

Я столкнулся с той же проблемой некоторое время назад и разбудил проект, так что в интерфейсе пользователя есть возможность принудительно найти 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-для-32bit.html
http://fbergmann.github.io/launch4j/

1 голос
/ 15 июля 2011

Если вы не против включить копию 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 
1 голос
/ 09 ноября 2010

Я не знаю Launch4J, но вы можете получить информацию о 32/64, прочитав System.getProperty("os.arch");. Если вы столкнулись с 64-битной системой, вы можете выйти из установщика с хорошим сообщением, чтобы сообщить пользователю об установке 32-битной JVM.

Вы можете обернуть свой стартовый код оберткой, чтобы показать пользователю окно сообщения.

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);
}
0 голосов
/ 08 января 2014

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

0 голосов
/ 10 ноября 2010

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

Ниже показано, как его добавить:

http://www.technimi.com/index.php?do=/group/java/forum/building-an-exe-using-launch4j-for-32-bit-jvm/

...