从java程序确定进程执行的运行时系统

时间:2010-09-03 09:33:52

标签: java process runtime

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

2 个答案:

答案 0 :(得分:3)

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

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.

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

答案 1 :(得分:0)

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

(如果有人在64位机器上运行32位JRE,你会得到x64,所以你不知道你是否使用64位架构,所以应该调用32位版本 - 但反过来说可以安全地调用本机应用程序的64位版本。)

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