2011-01-20 5 views
22

インストールしたソフトウェアの種類を確認するソフトウェアアプリケーションを開発していますが、そのためにはOSが32ビットか64ビットOSかどうかを知る必要があります。私はSystem.getProperty( "os.arch")を試しました。しかし、私はこのコマンドがOS自体ではなくJDK/JREのビット数を示していることを読んだ。 OSが使用されている(Windows 7、Mac OS、Ubuntuなど)ことを知る方法を教えていただけたら、C:Javaを使用しているOSのビット数を確認するにはどうすればよいですか? (J2SE、os.archではない)

+0

まあ、それは私が思ったことですが、私はこのリンクを見ました、あなたはミーghtはそれをチェックしたい:http://mark.koli.ch/2009/10/javas-osarch-system-property-is-the-bitness-of-the-jre-not-the-operating-system.htmlあなたの考えを教えてください –

+0

代替回答を受け入れることをお勧めします。 – assylias

答えて

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

は、より多くの情報のためのJava System Properties Tutorialを参照して、すべてのプラットフォームで利用可能であるべきです。

64ビットWindowsプラットフォームは、32ビットJVMの場合はJVMになります。実際には64ビットWindowsは、環境に関する32ビットプロセスに依存して、古い32ビットプログラムが64ビットOS上で正常に動作するのを助けます。詳細については、MSDN article about WOW64をお読みください。

WOW64の結果、System.getProperty("os.arch")を呼び出す32ビットJVMは "x86"を返します。あなたがWindows上で基盤となるOSの本当アーキテクチャを取得したい場合は、次のロジックを使用します。

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"; 

も参照してください:

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

私はmac osx上のrealArchの行にNPEを取得しました:( – user2693017

+0

これまでの実装よりもうまくいきましたありがとう! – CMerrill

+0

私はあなたの答えが正解として選択されていましたが、 –

1

plattformを特定することなくこれを行う方法はありません。 thisページの最後の投稿をご覧ください(解決策はplattform固有です)。

プロパティos.nameには、使用するオペレーティングシステムの名前が表示されます。os.versionのバージョンです。このライン

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

を呼び出すことによって確認することができ

-1

は、JVMは、32または64ビットである場合に識別する32または64に返します。

+3

'sun.'で始まるシステムプロパティは標準ではありません。 – Isaac

+5

さらに、OPはJVMではなくOSに関するものです – leonbloy

関連する問題