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

这让我找到了完美的解决方案:)

WSHShell.Exec("%comspec% /c ""{$java_location}/bin/java.exe"" -XshowSettings:properties -version | findstr java.vendor | findstr oracle")

在这种情况下,使用 %comspec% /c 运行似乎很神奇。

于 2013-09-06T11:21:13.500 回答
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 回答