実行可能ファイルのフォルダのジャンクションを使用してJavaを実行すると機能しない

実行可能ファイルのフォルダのジャンクションを使用してJavaを実行すると機能しない

Java バージョン 8 からバージョン 12 にアップグレードしました。OS は Windows 7 Home です。

Oracle はもはや個別の JRE を提供していないため、プログラムを実行するときに Java 実行可能ファイルのフォルダー名を指定する必要があります。Java が更新されたときにフォルダーを簡単に変更できるように、フォルダーの 1 つにジャンクションを配置し、それを PATH に追加しました。しかし、うまくいきません。以下は、少し編集したコマンドライン セッションです。

まず、ジャンクションとパスが正常であることを確認します。

D:\Peter\PC>dir jre*

27/09/2019  15:11    <JUNCTION>     JREDir [C:\Program Files\Javajdk-12.0.1\bin]

D:\Peter\PC>dir jredir\java*
 Volume in drive D is DATA
 Volume Serial Number is CE44-C814

 Directory of D:\Peter\PC\jredir

27/09/2019  11:36           148,328 java.dll
27/09/2019  11:36            51,048 java.exe
27/09/2019  11:36           226,664 javaaccessbridge.dll
27/09/2019  11:36            20,840 javac.exe
27/09/2019  11:36            20,840 javadoc.exe
27/09/2019  11:36           174,952 javajpeg.dll
27/09/2019  11:36            20,840 javap.exe
27/09/2019  11:36            51,048 javaw.exe
               8 File(s)        714,560 bytes
               0 Dir(s)  149,081,808,896 bytes free
C:\>path
PATH=C:\Program Files (x86)...ls\Binn\;D:\Peter\PC\JREDir

ジャンクション名を使用してJavaを実行してみましょう

D:\Peter\PC>jredir\java -version
Error: opening registry key 'Software\JavaSoft\JRE'
Error: could not find java.dll
Error: Could not find Java SE Runtime Environment.

これは Java 実行可能ファイルを見つけるようですが、レジストリ キーが必要です。ただし、実行可能ファイルのディレクトリに cd を実行すると正常に動作します。

C:\Program Files\Java\jdk-12.0.1\bin>java -version
Picked up _JAVA_OPTIONS: -Djava.net.preferIPv4Stack=true
java version "12.0.1" 2019-04-16
Java(TM) SE Runtime Environment (build 12.0.1+12)
Java HotSpot(TM) 64-Bit Server VM (build 12.0.1+12, mixed mode, sharing)

明示的なディレクトリ名で実行する場合も同様です。

D:\Peter\PC>"C:\Program Files\Java\jdk-12.0.1\bin"\java -version
Picked up _JAVA_OPTIONS: -Djava.net.preferIPv4Stack=true
java version "12.0.1" 2019-04-16
Java(TM) SE Runtime Environment (build 12.0.1+12)
Java HotSpot(TM) 64-Bit Server VM (build 12.0.1+12, mixed mode, sharing)

しかし、パスを使用して実行するとそうはなりません。

C:\>java -version
Error: opening registry key 'Software\JavaSoft\JRE'
Error: could not find java.dll
Error: Could not find Java SE Runtime Environment.

そこで2つの質問があります。

  1. ジャンクションが機能しないのはなぜですか? シンボリックリンクを試しましたが、これも機能しませんでした。
  2. これを動作させるにはレジストリに何が必要ですか?

答え1

古い質問であることは承知していますが、将来の参考のために共有します。

この例では、ジャンクションが1レベル深すぎます。そうではなくC:\Program Files\Javajdk-12.0.1\binC:\Program Files\Javajdk-12.0.1

関連情報