web-dev-qa-db-ja.com

WindowsにインストールされているSun / Oracle JREを検出するにはどうすればよいですか?

答えをグーグルで検索してみましたが、ブラウザからJavaを検出する方法、またはJava)を起動する非常に一般的な方法で、実行されるため、アプリケーションに長い遅延が発生する可能性があります(私のマシンで最初に起動したときは約2秒)

次の制限が適用される場合は、より速い方法があることを願っています。

  • Sun/OracleJREまたはJDKのみ
  • 1.6以上のみ
  • Windowsプラットフォームのみ
  • ないブラウザからではなく、単純な古いWin32実行可能ファイルから

この検出は、パブリックアプリケーションを対象としたものではなく、Windowsプラットフォームでの内部使用のみを目的としています。

読み取ることができるレジストリパスや解析できる構成ファイルはありますか?

15
Daniel Rikowski
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment
19
finnw

Windows>スタート> cmd>

C:> for %i in (Java.exe) do @echo.   %~$PATH:i

JREがインストールされている場合は、次のようにパスが表示されます。C:\Windows\System32\Java.exe

6
grokster

インストーラーが実行されていると仮定すると、レジストリーがおそらく最も簡単なルートになります。インストールされているバージョンは、次のさまざまなサブキーにあります。

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment

ユーザーが手動で環境を構成している場合は、Java_HOME/walk PATH変数を確認し、ファイルのバージョンを確認できます。デモWSHスクリプト:

'file:  whereJava.vbs
'usage: cscript /Nologo whereJava.vbs

'find Java 6 from registry
Set objShell = CreateObject("WScript.Shell")
Wscript.Echo objShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\" &_
                   "JavaSoft\Java Runtime Environment\1.6\JavaHome")

'check file version of Java.exe
javaHome = objShell.Environment.item("Java_HOME")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Wscript.Echo objFSO.GetFileVersion(javaHome & "\bin\Java.exe")

GetFileVersionInfo およびcompanyを参照してください。メジャーバージョン番号はJavaバージョン(5、6)と一致しているようです。JVMを呼び出さずに実行できる量には限りがあります。

4
McDowell

代わりに、コマンドプロンプトでコマンド「Java-version」を実行してみてください。

JREが正しくインストールされていないが、他のマシンからコピーされている場合、これは実際にはうまく機能しない可能性があります。確実な回避策は、JREインストールディレクトリ "C:\ Program Files\Java \"に移動し、コマンドプロンプトからbinフォルダに移動して次に、「Java -version」を実行します。出力は、インストールバージョン、および探しているすべての関連情報になります。

1
Shubhranshu

Windowsマシンには任意の数のJREおよびJDKをインストールできますが、HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Javaランタイム環境が設定されるのは1つだけです。

「Java_HOME」および「Path」環境変数は、コマンドラインJava呼び出しに影響を与えるため、検討することもできます。

1
mfx