我試圖從Java調用程序機可執行程序的流程執行運行時系統。我有三個exe文件一個爲Win32,其他Linux 32賓特和第三Linux 64位,現在我纔可以調用正確的可執行文件,我需要確定哪些平臺程序運行上。我可以通過簡單地獲取「os.name」系統屬性來確定操作系統,但不確定如何確定它是32位還是64位平臺?確定從java程序
回答
這裏是我的機器上的值有一些相關的系統屬性:
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.
對於完成者參考,見:
sun.arch.data.model北京時間不是VM說明書的一部分,並且可以不存在於其他供應商的JRE(例如IBM)。 請注意,數據模型也可能是「未知」 – MRalwasser 2010-09-03 10:29:46
一)我敢肯定所有其他虛擬機的供應商也會有類似的特性,所以它只是一個研究它們並使用基於價值的正確財產的事' java.vendor'系統屬性。 b)「未知」:這就是我使用''32「.equals(dataModel)'等進行防守編碼的方式。 – 2010-09-03 11:18:17
我不認爲這是可能沒有本地調用(如查詢註冊表),但你可以使用系統屬性os.arch以確定當前正在運行的應用程序的JRE的位數。如果有人在64位機器上運行32位JRE,你會得到64位,所以你不知道你是否在64位架構上,所以應該調用32位版本 - 但是相反你可以安全地調用你的本地應用程序的64位版本)。
另一種方式可能是暴力強制: 爲什麼現在總是嘗試eto運行64位版本,並在發生錯誤的情況下,使用32位二進制代替?
- 1. 確定Java程序的確定性線程執行
- 2. 如何從我的Java小程序中確定主機?
- 3. 從Java Websphere應用程序確定網絡用戶
- 4. 從Java程序
- 5. 從Java程序
- 6. Java程序,程序鎖定
- 7. 確定是否從另一個java應用程序執行java執行成功
- 8. 從java確定linux版本
- 9. 如何從Java應用程序指定更新程序目錄?
- 10. 從Java遠程執行Java程序
- 11. 明確指定程序集?
- 12. 確定邏輯程序
- 13. 從java程序啓動C++程序
- 14. 從java程序編譯C程序
- 15. 如何從java應用程序中確定JVM最小堆大小?
- 16. 確定從應用程序中運行的存儲過程
- 17. Hadoop定製Java程序
- 18. java小程序域鎖定
- 19. 重定向INTO Java程序?
- 20. 定期運行Java程序
- 21. Java:確定當前Windows用戶的程序化方式
- 22. 如何確定Java應用程序的年輕gc的原因
- 23. 如何確定Java程序使用哪些類?
- 24. 如何確定Java EE 6應用程序服務器類型?
- 25. 確定遞歸Java程序的基本情況
- 26. NetBeans安裝程序沒有正確定位Java
- 27. 確定我的Java程序的哪些部分需要優化
- 28. 確定用戶CPU大小的java程序?
- 29. 確定Java中硒驅動程序的類型
- 30. 如何確保Java線程按特定順序運行
相關: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