2011-01-20 12 views
22

Zajmuję się programowaniem, które sprawdza, jakie oprogramowanie zostało zainstalowane, ale aby to zrobić, muszę wiedzieć, czy OS jest 32-bitowym czy 64-bitowym systemem operacyjnym. Próbowałem System.getProperty ("os.arch"); ale potem przeczytałem, że to polecenie pokazuje nam tylko bycie JDK/JRE, a nie sam system operacyjny. Jeśli możesz mi powiedzieć, jak się dowiedzieć, z jakiego systemu operacyjnego jest używany (Windows 7, Mac OS, Ubuntu, itp.), To byłoby po prostu niesamowite. C:Jak mogę sprawdzić zgodność mojego systemu operacyjnego za pomocą Java? (J2SE, nie os.arch)

+0

No tak, tak właśnie myślałem, ale potem zobaczyłem ten link, ty mi Chcę to sprawdzić: http://mark.koli.ch/2009/10/javas-osarch-system-property-jest-bitness-of-the-jre-nie-the-operating-system.html powiedz mi, co myślisz –

+0

Możesz zaakceptować alternatywną odpowiedź. – assylias

Odpowiedz

42
System.getProperty("os.arch"); 

powinny być dostępne na wszystkich platformach, zobacz Java System Properties Tutorial aby uzyskać więcej informacji.

Ale 64-bitowe platformy Windows będą leżeć na JVM, jeśli jest to 32-bitowa maszyna JVM. W rzeczywistości 64-bitowy system Windows będzie pasował do dowolnego 32-bitowego procesu dotyczącego środowiska, aby pomóc starym 32-bitowym programom działać poprawnie na 64-bitowym systemie operacyjnym. Przeczytaj MSDN article about WOW64, aby uzyskać więcej informacji.

W wyniku WOW64 32-bitowy JVM wywołujący System.getProperty("os.arch") zwróci "x86". Jeśli chcesz uzyskać prawdziwe architekturę bazowego systemu operacyjnego na Windows, należy użyć następującej logiki:

String arch = System.getenv("PROCESSOR_ARCHITECTURE"); 
String wow64Arch = System.getenv("PROCESSOR_ARCHITEW6432"); 

String realArch = arch != null && arch.endsWith("64") 
        || wow64Arch != null && wow64Arch.endsWith("64") 
         ? "64" : "32"; 

Zobacz także:

HOWTO: Detect Process Bitness

Why %processor_architecture% always returns x86 instead of AMD64

Detect whether current Windows version is 32 bit or 64 bit

+0

Dostaję NPE na linii realArch na mac osx :( – user2693017

+0

Działa lepiej niż nasza poprzednia implementacja Dziękujemy! – CMerrill

+0

Chcę przeprosić, przez cały ten czas, chociaż miałem odpowiedź wybraną jako poprawną odpowiedź! Ale teraz to zrobione (: –

1

Nie ma sposobu, aby to zrobić bez uzyskania specyficznych cech. Spójrz na ostatni wpis na stronie this (rozwiązanie jest specyficzne dla platformy).

Właściwość os.name podaje nazwę używanego systemu operacyjnego, os.version wersję.

-1

można sprawdzić dzwoniąc

System.getProperty("sun.arch.data.model"); 

Linia ta zwraca 32 lub 64, które identyfikuje czy JVM jest albo 32 lub 64 bitów.

+3

Właściwości systemu rozpoczynające się od 'sun' nie są standardowe. – Isaac

+5

Co więcej, OP dotyczy OS, nie JVM – leonbloy

Powiązane problemy