0

Oracle がマシン上で提供する Java がどこにあるかを特定しようとしています。Java が配置されている場所がいくつかありますが、スクリプトは単純なスクリプトを使用して適切な (Oracle Java) バージョンを見つけることができるはずです。

{$java_location}/bin/java.exe -XshowSettings:properties -version | findstr java.vendor | findstr oracle

これは、Oracle Java でない場合は空の出力を返し、正しい場合はテキストを返す必要があります。残念ながら、VBScript はこのコマンドを呼び出すとハングアップします。

Set oExec = WSHShell.Exec({$java_location}/bin/java.exe -XshowSettings:properties -version | findstr java.vendor | findstr oracle > " & "c:\Users\J33nn\testscript")
Do While oExec.Status = 0
  WScript.Sleep 100
Loop

これを実行してスクリプトがハングしないようにする方法はありますか? または、VBS スクリプトからこのコマンドを実行する他の方法はありますか?

4

3 に答える 3

0

次のように、レジストリから Java インストールの場所を読み取ることができるはずです。

Const HKLM = &h80000002

vendor  = "Oracle"
basekey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"

Set reg = GetObject("winmgmts://./root/default:StdRegProv")

rc = reg.EnumKey(HKLM, basekey, subkeys)
If rc = 0 Then
  For Each key In subkeys
    subkey = baskey & "\" & key
    rc = reg.GetStringValue(HKLM, subkey, "Publisher", publisher)
    If rc = 0 Then
      If publisher = vendor Then
        rc = reg.GetStringValue(HKLM, subkey, "InstallLocation", location)
        If rc = 0 Then javaDir = location
      End If
    End If
  Next
End If

WScript.Echo javaDir
于 2013-09-06T11:32:53.923 に答える
0

回避策を見つけました。Exec を使用して出力を直接読み取ることはできないため、コマンドからの出力を一時ファイルに渡し、コマンドの実行後にそれを読み取るだけです。

WSHShell.Run "%comspec% /c ""{$java_location}/bin/java.exe"" -XshowSettings:properties -version | findstr java.vendor | findstr oracle > " & "c:\Users\J33nn\testscript", 0, TRUE
于 2013-09-06T11:16:40.560 に答える