ネイティブC++/MFCで複雑なセットアップ/インストーラアプリケーションを作成しています。私は非常にインストールされているJavaのバージョンを検出できるようにしたい(もしあれば)。ネイティブC++からJavaバージョンを検出できますか
これは可能ですか?
ネイティブC++/MFCで複雑なセットアップ/インストーラアプリケーションを作成しています。私は非常にインストールされているJavaのバージョンを検出できるようにしたい(もしあれば)。ネイティブC++からJavaバージョンを検出できますか
これは可能ですか?
java -version
をサブプロセス(パイプでそのプロセスの出力を読み取る)で実行し、結果があれば解析することができます。または、あなたはWindowsのレジストリを混乱させる可能性があります(これはさらに複雑に感じられますが、よりクラージーかもしれません)。
フォーク次のコマンドを実行するプロセス:java -version
。出力を収集し、解析します。次のようになります。
java version "1.5.0_16"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_16-b06-284)
Java HotSpot(TM) Client VM (build 1.5.0_16-133, mixed mode, sharing)
これはstderrに書き込まれます。 stderr出力を収集して解析する必要があります。
プラットフォーム上のシェルの助けが必要かもしれないと付け加えます。そうしないと、現在のディレクトリに「java」バイナリがないため、「java」を実行すると何も起こりません。 * nixでは、 "sh -c 'java -version'"のようなものを実行して、実際にパスからjavaを実行するようにします。私はWindows上で同等のことがわかりません。 –
@Sean Owen:Windowsは通常、シェルの助けを借りずにプロセスのPATH環境変数を自動的に探します。 –
その出力をどのように収集しますか?私は、STDOUTをテキストファイルにリダイレクトし、次にテキストファイルを解析することによってこれを試みました。ただし、データがファイルの代わりに画面に表示されるため、STDOUTを使用しているようではありません。 –
マシンに複数のJREを同時にインストールすることも可能です。インストールプログラムが複数のJREを検出した場合、そのうちの1つ(例えば、最新のもの)があなたのアプリで使用されるものであると仮定するのではなく、ユーザーに選択肢を提供する必要があります。
SOFTWARE \ JavaSoft \ Javaランタイム環境\ BrowserJavaVersionでバージョン情報を見つけて解析できました ありがとうございました –
C++プログラム内の "launch Java DLL"は実現可能でしょうか?デフォルトのJVMがマシン上にあるかどうかを確認する必要があります。 –
ブラウザのバージョンを実際のシステムのバージョンにすることはできませんでした...代わりに@ emg-2の答えを使用することをお勧めします。 –