10

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

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

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

4

8 回答 8

10

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

版本:launch4j-3.0.2-win32_Java32bitsDetection

于 2012-09-27T13:06:23.757 回答
5

大约一年前,我遇到了这个确切的问题,使用 Lauch4J 包装一个需要 32 位 DLL 的小型 Java 程序(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,它是唯一具有我需要的功能的工具。它不是免费的,虽然有一个评估版,而且我认为它并不昂贵。

希望这可以帮助!

于 2010-11-09T19:19:18.370 回答
1

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

您可以使用 Wrapper 包装您的 startUp-Code 以向用户显示 Message-Box。

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);
}
于 2010-11-09T13:06:23.110 回答
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 
于 2011-07-15T16:21:47.913 回答
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/

于 2013-04-11T07:36:54.600 回答
1

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

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

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

Launch4J JVM 选择对话框

于 2018-02-02T17:46:34.107 回答
0

您必须在配置时添加 JVM 参数。

下面的帖子中显示了如何添加它:

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

于 2010-11-10T05:03:03.700 回答
0

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

于 2014-01-07T20:40:54.247 回答