2011-01-25 6 views
8

インストールされているJVMがあるかどうかを検出しようとしています。そのため、java.exeを実行できます。Windows上のJVMの存在と場所を検出する方法は?

私が見つけたのはHKCU\Software\JavaSoft\Java Runtime Environment\<ver>です。 %PROGRAMFILES%\Java\jre<ver>にインストールされていると想定するのは安全ですか?

私はC#でこれをやろうとしていますが、答えはかなり言語にとらわれないと思いますので、どんな答えでも分かります。

EDIT: [OK]を愚かな私は、私はHKLM\Software\JavaSoft\Java Runtime Environment\<ver>\JavaHomeで動作しますHKLM\Software\JavaSoft\Java Runtime Environment\CurrentVersionで私に指摘How to detect whether java runtime is installed or not on a computer using c#ました。代わりにHKLM\Software\Wow6432Node\JavaSoft\Java Runtime Environmentの下にこれらを見つけることができました。 CPUの種類を嗅ぐことなくこれらのうちどれをチェックするべきかを検出する方法がありますか? Windowsシステム上の

+0

レジストリエントリにはJavaのすべてのバージョンが含まれていますか?一部のアプリケーションには、古いバージョンのJREがバンドルされているため、以前のレジストリエントリが上書きされる可能性があります。 – biziclop

+0

@biziclopこれは既定のJREを指している上記のCurrentVersionキーですべてのバージョンを並べて表示します –

+0

これはうれしいことです。ありがとうございます。私の発言はまだ立っているが、現在のバージョンを盲目的に信用しないでください。 :) – biziclop

答えて

4

私は私が使用して終了したコードでリングに私の帽子を投げるつもりです:

string javaDirectory = null; 

// Native registry key - 32b on 32b or 64b on 64b 
// Fall back on 32b Java on Win64 if available 
RegistryKey javaKey = 
    Registry.LocalMachine.OpenSubKey("SOFTWARE\\Javasoft\\Java Runtime Environment") ?? 
    Registry.LocalMachine.OpenSubKey("SOFTWARE\\Wow6432Node\\Javasoft\\Java Runtime Environment"); 

if (javaKey != null) 
{ 
    string javaVersion = javaKey.GetValue("CurrentVersion").ToString(); 
    try 
    { 
     javaDirectory = javaKey.OpenSubKey(javaVersion).GetValue("JavaHome").ToString(); 
    } catch(NullReferenceException) 
    { /* Ignore null deref, means we can't get a directory */ } 
} 

if (javaDirectory == null) 
{ 
    // deal with a lack of Java here. 
} 
2

A正しくインストールJVMは(最も可能性が高い。)コマンド・シェル・コマンドに応答します:

java -version 

これは、パスを返しませんが、試してください

java -verbose -version 

(少なくとも1つの行にサブ文字列rt.jarが含まれ、この行には「アクティブな」Java仮想マシンのパスが含まれます。

+0

または、jarのレジストリエントリを設定する必要があります。ファイルの関連付けを取得するためのWinAPI関数がありますが、私はそれを忘れていました。 – Christian

+0

少なくとも私のdev pcでは、これは当てはまりません。 'java'は' PATH'に登録されていません。一般に、私はWindows上の 'PATH'に頼っているのは良い考えではないと思います。単に多くのアプリがそれを気にしないからです。 –

+0

@Christianファイルの関連付けも信頼できません。アーカイブマネージャーによっては、jar関連を上書きするものがあります。 –

-1

"* JAVA_HOME *"環境変数を取得できます。

役立つ可能性があります。

EDIT:

より良いアイデアルック・ポル "CLASSPATH" 変数。

------- start -------- 
C:\Documents and Settings\david>set 
ALLUSERSPROFILE=... 
APPDATA=... 
CLASSPATH=.;C:\Archivos de programa\Java\jre6\lib\ext\QTJava.zip 
CommonProgramFiles=... 
... 
----- end ---- 
+0

また、私の開発PCでも残念なことに設定が正しくありません。しかし、間違いなく最初のショットを試みる価値がある。私の利益のために出力例を含めることができますか? –

+0

私は、新しくインストールされたJava JREを持つPCの環境変数を見ています。 私はvarialbe "JAVA_HOME"(私の間違い、申し訳ありません)が見つかりませんでしたが、いわゆる "CLASSPATH"が役に立ちます。 – Taber

0

は、JREは、cでのjava.exeをインストールしません:WINDOWS \ ?

+0

それは私のPC上ではなく、PATHのどこにもありませんでした。 (win7 64) –

+1

これは 'C:\'で検索して、 'C:\ Windows \ SysWOW64'で見つけました。 'HKLM \ Software \ Wow6432Node'に似た考え方でなければなりません。 IMOは、MSが真剣にx86の互換性を台無しにしたように見えます。 –

+0

@MatthewScharleyああ、ありがとう、私は最終的に実行するように日食を得ることができますかを見てみましょう。 –

関連する問題