当可执行文件应该找到 64 位时却找到了 32 位 Java
我正在从 PowerShell 脚本编写一个可执行文件,该脚本需要将正确版本的 Java3D 放到客户端计算机上。通过正确的版本,我的意思是当用户打开 CMD 并输入“java -version”时,它会提供 32 或 64 位。我需要为正确的体系结构选择 dll 文件。
问题是,我找到了一个64位W7系统的测试用例,同时安装了32位和64位JDK。 PATH 环境变量中仅包含 64 位版本。但是,当我运行批处理脚本或可执行文件并 echo java -version 时,会出现 32 位 java。因此,它安装 32 位 dll,当用户转到 cmd 时,它使用 64 位,因此不兼容。
由于 32 位 JDK 不包含在 PATH 变量中,为什么脚本运行 32 位 java 以及它从哪里获取此链接?
I am writing an executable from a PowerShell script that needs to put the proper version of Java3D onto the client computer. By proper version, I mean that when the user opens CMD and types 'java -version', it gives 32 or 64 bit. I need to choose the dll files for the right architecture.
The problem is, I have found a test case of a 64-bit W7 system with both 32-bit and 64-bit JDK installed. Only the 64-bit version is included in the PATH environment variable. However, when I run my batch script or executable and echo java -version, the 32-bit java comes up. As such, it installs the 32-bit dlls, and when the user goes to the cmd it uses 64-bit so it is not compatible.
Since the 32-bit JDK is not included in the PATH variable, why is the script running 32-bit java and where is it getting this link?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Google Chrome 和 Firefox 仍然是 64 位 Windows 操作系统下的 32 位应用程序,因此您可能正在 SysWOW64 下执行它们安装的 32 位 java - 特别是如果您使用在其中之一运行的 Java Web Start 安装应用程序浏览器。
我遇到了完全相同的问题,并且我已经实现了对已安装 java 的系统范围搜索,以便我可以创建一个批处理文件,以正确的位数调用确切的 java.exe。
这就是您所需要的:
您还需要更新的 WinRegistry.java 来从 Windows 注册表的 32 位和 64 位部分读取值:https://stackoverflow.com/a/11854901/828681
我通常不是java程序员,所以我的代码可能不会遵循java约定。告我吧
以下是我的 Win 7 64 位机器上 JavaFinder.findJavas() 的结果:
注意,SysWOW64 下有一个 32 位 java.exe - 当在 Chrome 或 Firefox 中运行时,它会被 Web Starter 调用,因为它们是 32 位位应用程序 - 除非您使用 JavaFinder 找到正确位的 java.exe 并使用它的完整路径。
Google Chrome and Firefox are still 32-bit applications under a 64-bit Windows OS, so you are probably executing a 32-bit java installed by them under SysWOW64 - specially if you are installing your application using Java Web Start running inside one of these browsers.
I had the exact same problem, and I've implemented a system-wide search for installed javas, so that I can create a batch file that calls the exact java.exe with the proper bitness.
This is what you need:
You will also need the updated WinRegistry.java to read values from both the from 32-bits and 64-bits sections of the windows registry: https://stackoverflow.com/a/11854901/828681
I'm not usually a java programmer, so my code probably does not follow java conventions. Sue me.
Here are the results of JavaFinder.findJavas() on my Win 7 64-bits machine:
Note there's a 32-bit java.exe under SysWOW64 - and it will get called by the web starter when running inside Chrome or Firefox since they are 32-bit applications - unless you use the JavaFinder to find a properly bitted java.exe and use it's full path.