确定java程序进程执行的运行时系统
我正在尝试从 java 程序调用本机可执行文件。我有三个 exe 文件,一个用于 win32,另一个用于 linux 32 位,第三个用于 linux 64 位,现在在我可以调用正确的可执行文件之前,我需要确定程序正在哪个平台上运行。我可以通过简单地获取“os.name”系统属性来确定操作系统,但不确定如何确定它是 32 位还是 64 位平台?
I am trying to call native executables from java program. I have three exe files one for win32, other linux 32-bint and third linux 64-bit, now before I can call the right executable I need to determine which platform program is running on. I can determind Operating system by simply getting "os.name" System property, but not sure how to get determine if it is 32-bit or 64-bit platform?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
以下是一些相关的系统属性以及我的计算机上的值:
从这些信息中,您应该能够猜测如下内容:
有关完整的参考,请参阅:
Here are some relevant System properties with the values on my machine:
From this information, you should be able to guess something like this:
For a completer reference, see:
我认为如果没有本机调用(例如查询注册表),这是不可能的,但您可以使用系统属性 os.arch 来确定当前运行应用程序的 JRE 的位数。
(如果有人在 64 位机器上运行 32 位 JRE,您将获得 x64,因此您不知道自己是否在 64 位架构上,因此应该调用 32 位版本 - 但反过来您可以安全地调用您的本机应用程序的 64 位版本)。
另一种方法可能是暴力破解:
为什么现在总是尝试运行 64 位版本,并在出现错误时使用 32 位二进制版本?
I don't think that this is possible without native calls (e.g. to query the registry), but you can use the system property os.arch to determine the bitness of the JRE which is currently running the application.
(if somebody run a 32 bit JRE on a 64 bit machine, you'll get x64, so you're not knowing if you are on a 64bit architecture, so should invoke the 32bit version - but the other way round you can safely call the 64 bit version of your native application).
Another way might be brute forcing:
Why now always trying eto run the 64 bit version, and in case of an error, use the 32 bit binary instead?