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)
Odpowiedz
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:
Why %processor_architecture% always returns x86 instead of AMD64
Dostaję NPE na linii realArch na mac osx :( – user2693017
Działa lepiej niż nasza poprzednia implementacja Dziękujemy! – CMerrill
Chcę przeprosić, przez cały ten czas, chociaż miałem odpowiedź wybraną jako poprawną odpowiedź! Ale teraz to zrobione (: –
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ę.
os.arch NIE jest wersją systemu operacyjnego, strzeż się tego rozwiązania! http://mark.koli.ch/2009/10/javas-osarch-system-property-is-the-bitness-of-the-jre-not-the-operating-system.html
Chociaż może to teoretycznie odpowiedzieć na pytanie, [byłoby lepiej] (// meta.stackoverflow.com/q/8259), aby dołączyć istotne części odpowiedzi tutaj i podaj link do odniesienia. –
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 –
Możesz zaakceptować alternatywną odpowiedź. – assylias