繁体   English   中英

确定用于从Java程序执行过程的运行时系统

[英]Determine runtime system for process execution from java program

我正在尝试从Java程序调用本机可执行文件。 我有三个exe文件,一个用于win32,另一个用于32位linux,第三个用于64位linux,现在,在我可以调用正确的可执行文件之前,我需要确定正在运行哪个平台程序。 我可以通过简单地获取“ os.name”系统属性来确定操作系统,但是不确定如何确定它是32位还是64位平台?

以下是一些相关的系统属性以及我机器上的值:

os.arch:                 x86
os.name:                 Windows Vista
sun.arch.data.model:     32

从这些信息中,您应该能够猜出如下信息:

String osName     = System.getProperty("os.name").toLowerString();
String dataModel  = System.getProperty("sun.arch.data.model");

boolean isWindows = osName.startsWith("windows");
boolean isLinux   = osName.startsWith("linux"); // or whatever
boolean is32bit   = "32".equals(dataModel);
boolean is64bit   = "64".equals(dataModel);

if(isWindows && is32bit){
    call32BitWindowsLib();
}

//etc.

有关完整的参考,请参阅:

我认为没有本机调用(例如查询注册表)是不可能的,但是您可以使用系统属性os.arch来确定当前正在运行应用程序的JRE的位数。

(如果有人在64位计算机上运行32位JRE,则会得到x64,因此您不知道自己是否在64位体系结构上,因此应调用32位版本-但反之,您可以安全地调用本机应用程序的64位版本)。

另一种方法可能是强行强制:为什么现在总是尝试运行e位来运行64位版本,如果出现错误,请改用32位二进制文​​件?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM