OSの種類を知りたいのですが、64ビットOSか32ビットOSかを意味します。しかし、OSに関するシステムプロパティを取得する32ビット/ 64ビット実行可能ファイルとは異なる応答を取得しています
システムプロパティから詳細を取得しています。そして私は64ビットマシンとOSウィンドウ8.1X64を持っています
"OS Architecture : " + System.getProperty("os.Arch"));
"OS Name : " + System.getProperty("os.name"));
"OS Version : " + System.getProperty("os.version")
"Data Model : " + System.getProperty("Sun.Arch.data.model"));
OSアーキテクチャ:AMD64
OS名:Windows 8
OSバージョン:6.2 AMD64
データモデル:64
OSアーキテクチャ:x86
OS名:Windows 8
OSバージョン:6.2 x86
データモデル:32
OSの実際のビットタイプを取得するにはどうすればよいですか?
System.getProperty("os.Arch");
すべてのプラットフォームで使用できるはずです。詳細については、Javaシステムプロパティチュートリアルを参照してください。
ただし、32ビットJVMの場合、64ビットWindowsプラットフォームはJVMに依存します。実際、64ビットWindowsは、古い32ビットプログラムが64ビットOSで正しく動作するのを支援するために、環境に関する32ビットプロセスに依存します。詳細については、WOW64に関するMSDNの記事を参照してください。
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.endsWith("64")
|| wow64Arch != null && wow64Arch.endsWith("64")
? "64" : "32";
これはあなたを助けるはずです
System.getProperty("os.Arch");
jREのアーキテクチャが32ビットの場合、「x86」を返します。 JNIを使用してシステムの実際のアーキテクチャを取得するには、ネイティブコードを作成する必要があります。
最良の解決策(クロスプラットフォームIMOでもあります)はここに与えられた答えです: https://stackoverflow.com/a/2269242/1973164
Os.Archシステム変数を読み取ることを正確に信頼していません。ユーザーが64ビットシステムで64ビットJVMを実行している場合は機能します。ユーザーが64ビットシステムで32ビットJVMを実行している場合は、機能しません。
次のコードは、Windows64ビットオペレーティングシステムを正しく検出するために機能します。 Windows 64ビットシステムでは、環境変数「Programfiles(x86)」が設定されます。 32ビットシステムでは設定されず、Javaはnullとして読み取ります。
boolean is64bit = false; if (System.getProperty("os.name").contains("Windows")) { is64bit = (System.getenv("ProgramFiles(x86)") != null); } else { is64bit = (System.getProperty("os.Arch").indexOf("64") != -1); }
Linux、Solaris、Macなどの他のオペレーティングシステムでも、この問題が発生する可能性があります。したがって、これは完全な解決策ではありません。 Macの場合、AppleはOSに一致するようにJVMをロックダウンするため、おそらく安全です。ただし、LinuxやSolarisなどは64ビットシステムで32ビットJVMを使用する場合があります。したがって、これは注意して使用してください。
System.getProperty( "os.Arch")は、実際のオペレーティングシステムではなく、常にjreのビットタイプを返します。
Jniコードとcalllを書くIsWow64Process
winapiから。あなたは窓を使っているので。
このブール関数は、プロセスが64ビットOSで実行されているかどうかを示します。