我正在使用 Launch4J 启动我的 Java 应用程序,如果系统上存在 x64 JRE,Launch4J 似乎更喜欢它。
不幸的是,我的应用程序无法在 64 位 JVM 上运行,因为我正在加载 32 位 DLL,这是不可能的,并且会导致 UnsatisfiedLinkError。
有没有办法强制/欺骗 Launch4J 只使用 32 位 JVM?
我有完全相同的问题:如果同时安装了 32 和 64 位 JDK/JRE,则进入 64 位环境,此工具始终检测 64 位版本。我已经修补了源代码(java + C++)以制作我自己的版本并重新编译所有。我添加了一个复选框来强制将 32 位 JDK/JRE 检测到 64 位 Windows 环境中。只需下载版本并将其用作原始版本即可。
大约一年前,我遇到了这个确切的问题,使用 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,它是唯一具有我需要的功能的工具。它不是免费的,虽然有一个评估版,而且我认为它并不昂贵。
希望这可以帮助!
我不知道 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);
}
如果您不介意在您的应用程序中包含 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/
您必须在配置时添加 JVM 参数。
下面的帖子中显示了如何添加它:
对于像Areca这样的 Launch4j 应用程序的任何用户,如果被此应用程序刺痛并需要快速解决,请查看启动应用程序的目录,您将找到一个完整的 java 命令行来在名为 launch4j 的文件中运行您的程序。日志。只需使用您喜欢的 java vm 创建一个 bat 文件或脚本,然后使用日志中的完整命令行运行它。