Почему VBScript иногда блокируется в WshShell.Exec? - PullRequest
1 голос
/ 01 ноября 2011

У меня есть html-приложение (HTA), которое использует WshShell.Exec для получения версии Windows.Я использую wmic os get Caption, чтобы получить конкретную версию, которая прекрасно работает в командной строке и в пакетном скрипте.Я также проверил способ, которым я звоню WshShell.Exec, и он отлично работает с другими командами (то есть echo Windows 2008).Проблема возникает, когда я пытаюсь объединить эти вещи, кажется, что Exec просто зависает.Можете ли вы порекомендовать способ обойти это?Вот мой код:

Function GetWinVersion
    'Returns 2008, XP, or 7
    set WshShell = CreateObject("WScript.Shell")
    set oExec = WshShell.Exec("wmic os get Caption")
    do while oExec.Status = 0
        'I added this very busy wait, though it doesn't seem to help
        'Would sleep if it was available in an hta
    loop
    While oExec.StdOut.AtEndOfStream <> True
        thisLine = oExec.StdOut.ReadLine
        'MsgBox "Found line: " & thisLine
        if InStr(thisLine, "2008") > 0 then
            GetWinVersion=2008
            Exit Function
        elseif InStr(thisLine, "XP") > 0 then
            GetWinVersion=XP
            Exit Function
        elseif InStr(thisLine, "Windows 7") > 0 then
            GetWinVersion=7
            Exit Function
        end if
    Wend
    MsgBox "Error parsing output of wmic os get Caption"
    self.Close
End Function

1 Ответ

3 голосов
/ 01 ноября 2011

WMIC - это оболочка для WMI, которую вы можете использовать непосредственно в VBS;

function GetWinVersion
    dim WMI: set WMI = GetObject("winmgmts:\\.\root\cimv2")
    dim colResults: set colResults = WMI.ExecQuery("Select * from Win32_OperatingSystem")
    dim item
    for each item in colResults
        GetWinVersion = item.caption
    next
end function
...