将Launch4J配置为仅使用32位JVM

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

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

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

大约一年前我遇到了这个确切的问题,使用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,这是唯一一个拥有我需要的function的人。 它不是免费的,虽然有一个评估版本,我认为它并不昂贵。

希望这可以帮助!

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

版本: launch4j-3.0.2-win32_Java32bitsDetection

我不知道Launch4J,但你可以通过阅读System.getProperty("os.arch");获得有关32/64的信息System.getProperty("os.arch"); 。 如果遇到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); } 

如果您不介意在应用程序中包含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 

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

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

配置时必须添加JVM参数。

它在下面的post中显示了如何添加它:

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

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

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

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

Launch4J JVM选择对话框