2010-09-03 25 views
1

我試圖從Java調用程序機可執行程序的流程執行運行時系統。我有三個exe文件一個爲Win32,其他Linux 32賓特和第三Linux 64位,現在我纔可以調用正確的可執行文件,我需要確定哪些平臺程序運行上。我可以通過簡單地獲取「os.name」系統屬性來確定操作系統,但不確定如何確定它是32位還是64位平臺?確定從java程序

+0

相關:http://stackoverflow.com/questions/807263/how-do-i-detect-which-kind-of-jre-is-installed-32bit-vs-64bit – McDowell 2010-09-04 14:44:46

回答

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. 

對於完成者參考,見:

+0

sun.arch.data.model北京時間不是VM說明書的一部分,並且可以不存在於其他供應商的JRE(例如IBM)。 請注意,數據模型也可能是「未知」 – MRalwasser 2010-09-03 10:29:46

+0

一)我敢肯定所有其他虛擬機的供應商也會有類似的特性,所以它只是一個研究它們並使用基於價值的正確財產的事' java.vendor'系統屬性。 b)「未知」:這就是我使用''32「.equals(dataModel)'等進行防守編碼的方式。 – 2010-09-03 11:18:17

0

我不認爲這是可能沒有本地調用(如查詢註冊表),但你可以使用系統屬性os.arch以確定當前正在運行的應用程序的JRE的位數。如果有人在64位機器上運行32位JRE,你會得到64位,所以你不知道你是否在64位架構上,所以應該調用32位版本 - 但是相反你可以安全地調用你的本地應用程序的64位版本)。

另一種方式可能是暴力強制: 爲什麼現在總是嘗試eto運行64位版本,並在發生錯誤的情況下,使用32位二進制代替?