将 Launch4J 配置为仅使用 32 位 JVM
我正在使用 Launch4J 启动我的 Java 应用程序,如果系统上存在 x64 JRE,Launch4J 似乎更喜欢它。
不幸的是,我的应用程序无法在 64 位 JVM 上运行,因为我正在加载 32 位 DLL,这是不可能的,并且会导致 UnsatisfiedLinkError。
有没有办法强制/欺骗 Launch4J 仅使用 32 位 JVM?
I'm using Launch4J to start my Java application and if an x64 JRE is present on the system, Launch4J seems to prefer it.
Unfortunately my application cannot run on a 64 bit JVM because I'm loading a 32 bit DLL, which is not possible and leads to an UnsatisfiedLinkError.
Is there any way to force/trick Launch4J to use a 32 bit JVM only?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
我有完全相同的问题:在 64 位环境中,如果安装了 32 位和 64 位 JDK/JRE,则此工具始终检测 64 位版本。
我已经修补了源(java + C++)代码以制作我自己的版本并重新编译所有代码。我添加了一个复选框以强制将 32 位 JDK/JRE 检测转移到 64 位 Windows 环境中。
只需下载该版本并将其用作原始版本即可。
版本: launch4j-3.0.2 -win32_Java32bitsDetection
I have exactly the same problem : Into 64 bits environment if both 32 ans 64 bits JDK/JRE are installed this tools always detect the 64 bits version.
I have patched the source (java + C++) code to make my own version and re-compile all. I add a check box to FORCE the 32 bits JDK/JRE detection into 64 bits windows environment.
Just donwload the version and use it as the original one.
Version : launch4j-3.0.2-win32_Java32bitsDetection
大约一年前,我使用 Lauch4J 包装一个需要 32 位 DLL(swt-win32.dll,正如它所发生的那样)的小型 Java 程序时遇到了这个问题。
我发现如果安装了 32 位和 64 位 JVM,Launch4J 总是会优先选择 64 位 JVM。只有卸载了 64 位 JVM 才有效,这显然不是一个实用的解决方案。
经过大量搜索并在其论坛上发布问题后,我发现没有办法让 Launch4J 更喜欢(并要求)32 位 JVM。
因此,我评估了许多替代 JRE 转换器(我使用了以下列表: http://www.excelsior-usa.com/articles/java-to-exe.html)。
我最终选择了 Jar2Exe,它是唯一具有我需要的功能的。它不是免费的,尽管有评估版,而且我认为它并不贵。
希望这有帮助!
I had this exact problem about a year ago, using Lauch4J to wrap a small Java program that required a 32-bit DLL (swt-win32.dll, as it happened).
I found that if there were 32-bit and 64-bit JVMs installed, Launch4J would always favour the 64-bit one. It would only work if the 64-bit JVM was uninstalled, which was obviously not a practical solution.
I found no way of getting Launch4J to prefer (and require) the 32-bit JVM, after searching quite a bit and posting questions on its forum.
Therefore, I evaluated a good number of alternative JRE converters (I used this list: http://www.excelsior-usa.com/articles/java-to-exe.html).
I ended up settling on Jar2Exe, which was the only one that had the features I needed. It's not free, though there is an evaluation version, and I think it wasn't expensive.
Hope this helps!
我不知道Launch4J,但是您可以通过阅读
System.getProperty(“os.arch”);
来获取有关32/64的信息。如果您遇到 64 位系统,您可以退出安装程序并显示一条友好消息,告诉用户安装 32 位 JVM。您可以使用包装器包装您的启动代码,以向用户显示消息框。
I don't know Launch4J, but you can get the Information about 32/64 by reading
System.getProperty("os.arch");
. If you encounter a 64-bit system you may quit the installer with a nice message, to tell the User to install a 32-bit JVM.You may Wrap your startUp-Code with an Wrapper to show a Message-Box to the user.
如果您不介意在您的应用程序中包含 JDK 的副本,请尝试将这些参数(在 MyApp.ini 中)传递给 launch4j:
这里还可以使用其他内容:
如果您不打包 JRE ,您可以将 Launch4j 选项设置为使用“jreOnly”,然后使用名为“%ProgramFiles%”的 DOS 环境变量,您可以在预期位置找到 32 位或 64 位 JRE,具体取决于您是否使用SysWOW64 32 位 cmd.exe shell 或常规 64 位 shell。然后你可以将这些选项传递给 JVM:
或者
If you don't mind including a copy of JDK with your app, try passing these arguments (in the MyApp.ini) to launch4j:
There are also other things going on here that you could use:
If you don't package the JRE, you can set the Launch4j option to use "jreOnly" and then, using the DOS environment variable called "%ProgramFiles%" you can locate the 32-bit or the 64-bit JRE in the expected location, depending on whether you used the SysWOW64 32-bit cmd.exe shell or the regular 64-bit shell. Then you can pass these options to the JVM:
or
我前段时间遇到了同样的问题并分叉了该项目,因此用户界面公开了一个强制应该找到 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/
I encountered the same problem some time ago and forked the project, so that the User interface exposes an option to force that a 32bit JVM ought to be found, you can grab the installer of launch4j 3.0.3 with the patch from:
http://fbergmann.github.io/launch4j/files/SetupLaunch4j_3.0.3.exe
and read more here:
http://frank-fbergmann.blogspot.de/2012/11/launch4j-for-32bit.html
http://fbergmann.github.io/launch4j/
这是一个老问题,Launch4J 自提出以来已更新。现在有一个专用的用户界面控件用于选择首选的 JVM 版本。
目前的选项是:
最后一个,当然,正是 OP 所要求的。
This is an old question and Launch4J has been updated since it was asked. Now there is a dedicated user-interface control for selecting which version of the JVM to prefer.
The options currently are:
The last, one of course, is exactly what the OP requested.
对于像 Areca 这样的 Launch4j 应用程序的任何用户来说,如果被这个问题困扰,并且需要快速解决,请查看启动应用程序的目录,您将找到一个完整的 java 命令行来运行您的应用程序。名为 launch4j.log 的文件中的程序。只需使用您喜欢的 java vm 创建一个 bat 文件或脚本,然后使用日志中的完整命令行运行它。
For any users of Launch4j applications like Areca that get stung by this one, and need a quick work around, look in the directory where the application is launched and you will find a complete java command line to run your program inside a file named launch4j.log. Just make a bat file or script using the java vm you prefer and run it with the full command line in the log.
您必须在配置时添加 JVM 参数。
下面的帖子显示了如何添加它:
http://www.technimi.com/index.php?do=/group/java/forum/building-an-exe-using-launch4j-for -32位jvm/
You will have to add a JVM parameter while configuring.
It is shown in the below post on how to add it:
http://www.technimi.com/index.php?do=/group/java/forum/building-an-exe-using-launch4j-for-32-bit-jvm/