Java是否有任何可調用的API來知道進程或.exe文件是32位還是64位? - 不是您的代碼正在運行的JVM如何確定Java中是否有其他進程或可執行文件是32位還是64位
回答
沒有用於確定外部進程是32位還是64位的標準Java API。
如果您想這樣做,您需要使用本機代碼或調用外部實用程序來執行此操作。在這兩種情況下,解決方案可能都是平臺特定的。下面是一些可能的(特定平臺)導致:
(OSX)Is there a way to check if process is 64 bit or 32 bit?
(Linux)的https://unix.stackexchange.com/questions/12862/how-to-tell-if-a-running-program-is-64-bit-in-linux
(請注意,在在Windows的情況下,解決方案涉及到測試「.exe」文件而不是正在運行的進程,所以你需要能夠首先確定相關的「.exe」文件...)
謝謝Stephen! – Mango
對於Windows,我總是查詢系統環境變量「PROCESSOR_ARCHITECTURE」。如果它返回x86,那麼您正在運行32位Windows。 – TheBlastOne
@TheBlastOne - 但這是解決一個不同的問題......確定什麼架構被用於這個過程。 –
Java不附帶任何標準API,可以讓您確定程序是32位還是64位。
但是,在Windows上,您可以使用(假設您已安裝平臺SDK)dumpbin /headers
。調用這個函數將產生關於該文件的各種信息,關於該文件是32位還是64位的信息。在輸出上64位,你會像
8664 machine (x64)
在32位,你會得到類似
14C machine (x86)
你可以閱讀更多有關其他方式determining if an application is 64-bit on SuperUser或The Windows HPC Team Blog。
感謝您的建議。我已經嘗試過了,它在Visual Studio CMD中有效。 – Mango
我爲Windows編寫了一個Java的方法,它看起來像dumpbin
相同的標題,而不必在系統上(基於this answer)。
/**
* Reads the .exe file to find headers that tell us if the file is 32 or 64 bit.
*
* Note: Assumes byte pattern 0x50, 0x45, 0x00, 0x00 just before the byte that tells us the architecture.
*
* @param filepath fully qualified .exe file path.
* @return true if the file is a 64-bit executable; false otherwise.
* @throws IOException if there is a problem reading the file or the file does not end in .exe.
*/
public static boolean isExeFile64Bit(String filepath) throws IOException {
if (!filepath.endsWith(".exe")) {
throw new IOException("Not a Windows .exe file.");
}
byte[] fileData = new byte[1024]; // Should be enough bytes to make it to the necessary header.
try (FileInputStream input = new FileInputStream(filepath)) {
int bytesRead = input.read(fileData);
for (int i = 0; i < bytesRead; i++) {
if (fileData[i] == 0x50 && (i+5 < bytesRead)) {
if (fileData[i+1] == 0x45 && fileData[i+2] == 0 && fileData[i+3] == 0) {
return fileData[i+4] == 0x64;
}
}
}
}
return false;
}
public static void main(String[] args) throws IOException {
String[] files = new String[] {
"C:/Windows/system32/cmd.exe", // 64-bit
"C:/Windows/syswow64/cmd.exe", // 32-bit
"C:/Program Files (x86)/Java/jre1.8.0_73/bin/java.exe", // 32-bit
"C:/Program Files/Java/jre1.8.0_73/bin/java.exe", // 64-bit
};
for (String file : files) {
System.out.println((isExeFile64Bit(file) ? "64" : "32") + "-bit file: " + file + ".");
}
}
主要方法輸出如下:
64-bit file: C:/Windows/system32/cmd.exe.
32-bit file: C:/Windows/syswow64/cmd.exe.
32-bit file: C:/Program Files (x86)/Java/jre1.8.0_73/bin/java.exe.
64-bit file: C:/Program Files/Java/jre1.8.0_73/bin/java.exe.
- 1. 確定可執行文件(或庫)是32位還是64位
- 2. 確定可執行文件(或庫)是32位還是64位(在Windows上)
- 3. 確定C#中的可執行文件是64位還是32位
- 4. 如何以編程方式確定特定進程是32位還是64位
- 5. 如何使用Java API確定文件是32位還是64位?
- 6. 如何從句柄中確定進程是32位還是64位?
- 7. 如何確定進程ID(PID)是32位還是64位應用程序?
- 8. 使用WMI,我如何確定遠程進程是32位還是64位?
- 9. 無論系統是32位還是64位,int都是32位還是64位?
- 10. 有沒有辦法檢查進程是64位還是32位?
- 11. 如何確定System.Diagnostics.Process是32位還是64位?
- 12. 檢查正在運行的進程是32位還是64位
- 13. 確定Java安裝是32位還是64位的Windows bat文件?
- 14. 確定是否編譯ELF對象是32位或64位
- 15. WMI和Win32_Process - 確定是32位還是64位?
- 16. 確定當前的PowerShell Process是32位還是64位?
- 17. 確定iOS設備是32位還是64位
- 18. gcc如何確定默認情況下是否生成32位或64位可執行文件?
- 19. 如何判斷我寫的程序是32位還是64位?
- 20. 如何檢測Cocoa應用程序是32位還是64位?
- 21. 如何判斷應用程序是64位還是32位?
- 22. 我如何檢查編譯的二進制文件是32位還是64位?
- 23. 如何確定操作系統在Go中是32位還是64位?
- 24. 如何確定Python中的數字是32位還是64位整數?
- 25. 無論系統是32位還是64位,uint均爲32位?
- 26. 查找ipa文件是32位還是64位。 (macos/unix)
- 27. 如何在PowerShell中檢查要安裝的可執行文件是32位還是64位?
- 28. 如何確定我的操作系統是32位還是64位?
- 29. 如何確定在Windows上安裝的庫是32位還是64位?
- 30. 如何檢測,如果CPU是32位還是64位
要查看是否一些*其他*過程是32或64位?或者檢查運行的JVM是否是32/64位? – nneonneo
要在Windows中查看其他進程,而不是JVM。 – Mango
我發現這是非常相似的... http://stackoverflow.com/a/9783522 – Mango