2013-09-06 2 views
0

Я пытаюсь определить, где находится Java, предоставленная Oracle на машине. У меня есть несколько места, где находится Java, но мой сценарий должен быть в состоянии найти подходящую (Oracle Java) версию, используя простой скрипт:VBS-скрипт для поиска 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?

ответ

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 
0

И это привело меня к идеальному решению :)

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

Кажется, что работает с% COMSPEC%/с делает волшебство в этом случае.

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 
Смежные вопросы