我正在使用Launch4J来启动我的Java应用程序,如果系统上存在x64 JRE,则Launch4J似乎更喜欢它。
不幸的是我的应用程序无法在64位JVM上运行,因为我正在加载32位DLL,这是不可能的,并导致UnsatisfiedLinkError。
有没有办法强制/欺骗Launch4J只使用32位JVM?
答案 0 :(得分:10)
我有完全相同的问题:如果安装了32位64位JDK / JRE,则进入64位环境,此工具始终检测64位版本。 我修补了源代码(java + C ++)代码来制作我自己的版本并重新编译所有代码。我添加了一个复选框,将32位JDK / JRE检测强制转换为64位窗口环境。 只需卸载该版本并将其用作原始版本。
答案 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。 目前的选项是:
最后一个当然是OP所要求的。
答案 6 :(得分:0)
配置时必须添加JVM参数。
以下文章显示了如何添加它:
答案 7 :(得分:0)
对于像 Areca 这样的Launch4j应用程序的任何用户都会受到这种攻击,并需要快速解决,请查看启动该应用程序的目录,您将找到一个完整的java命令行在名为 launch4j.log 的文件中运行程序。只需使用您喜欢的java vm创建一个bat文件或脚本,然后使用日志中的完整命令行运行它。