将Launch4J配置为仅使用32位JVM

时间:2010-04-22 07:26:07

标签: java 64-bit launch4j

我正在使用Launch4J来启动我的Java应用程序,如果系统上存在x64 JRE,则Launch4J似乎更喜欢它。

不幸的是我的应用程序无法在64位JVM上运行,因为我正在加载32位DLL,这是不可能的,并导致UnsatisfiedLinkError。

有没有办法强制/欺骗Launch4J只使用32位JVM?

8 个答案:

答案 0 :(得分:10)

我有完全相同的问题:如果安装了32位64位JDK / JRE,则进入64位环境,此工具始终检测64位版本。 我修补了源代码(java + C ++)代码来制作我自己的版本并重新编译所有代码。我添加了一个复选框,将32位JDK / JRE检测强制转换为64位窗口环境。 只需卸载该版本并将其用作原始版本。

版本:launch4j-3.0.2-win32_Java32bitsDetection

答案 1 :(得分:5)

一年前我遇到了这个确切的问题,使用Lauch4J来包装一个需要32位DLL的小型Java程序(swt-win32.dll,因为它发生了)。

我发现如果安装了32位和64位JVM,Launch4J总是支持64位JVM。它只有在卸载64位JVM时才有效,这显然不是一个实用的解决方案。

我发现没有办法让Launch4J更喜欢(并要求)32位JVM,经过大量搜索并在论坛上发布问题。

因此,我评估了大量替代JRE转换器(我使用此列表:http://www.excelsior-usa.com/articles/java-to-exe.html)。

我最终选择了Jar2Exe,这是唯一一个拥有我需要的功能的人。它不是免费的,虽然有一个评估版本,我认为它并不昂贵。

希望这有帮助!

答案 2 :(得分:1)

我不知道Launch4J,但您可以通过阅读System.getProperty("os.arch");获取有关32/64的信息。如果遇到64位系统,可以使用一条好消息退出安装程序,告诉用户安装32位JVM。

您可以使用包装器包装startUp-Code以向用户显示消息框。

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);
}

答案 3 :(得分:1)

如果您不介意在您的应用中包含JDK副本,请尝试将这些参数(在MyApp.ini中)传递给launch4j:

-D32 -Djava.home=d:\MyApp\JDK32 -Djava.ext.dirs=d:\MyApp\JDK32\jre\lib\ext 

此处还有其他可以使用的内容:

如果不打包JRE,可以将Launch4j选项设置为使用“jreOnly”,然后使用名为“%ProgramFiles%”的DOS环境变量,找到32位或64位JRE在预期的位置,取决于您使用的是SysWOW64 32位cmd.exe shell还是常规的64位shell。然后,您可以将这些选项传递给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 

答案 4 :(得分:1)

我前段时间遇到了同样的问题并分叉了项目,因此用户界面公开了一个强制应该找到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/

答案 5 :(得分:1)

这是一个老问题,Launch4J自被问及以来已经更新。现在有一个专用的用户界面控件,用于选择要使用哪个版本的JVM。 目前的选项是:

  • 仅限64位
  • 首先是64位,然后是32位
  • 首先是32位,然后是64位
  • 仅限32位

最后一个当然是OP所要求的。

Launch4J JVM Selection Dialog

答案 6 :(得分:0)

配置时必须添加JVM参数。

以下文章显示了如何添加它:

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

答案 7 :(得分:0)

对于像 Areca 这样的Launch4j应用程序的任何用户都会受到这种攻击,并需要快速解决,请查看启动该应用程序的目录,您将找到一个完整的java命令行在名为 launch4j.log 的文件中运行程序。只需使用您喜欢的java vm创建一个bat文件或脚本,然后使用日志中的完整命令行运行它。