WSH VBScript中SWbemObjectSet的查询无效

时间:2014-03-14 00:51:01

标签: windows process vbscript

我有一个问题我希望有人可以帮助我。我在WScript中运行VBScript,其中这两个函数一起工作以查看进程何时关闭

function closeApp(appNameStr)
    '* What ever code required to close the application here *
    Do Until isRunningProcess(appNameStr) = False
        Wscript.Sleep 250
    Loop
end function

function isRunningProcess(processNameStr)
    Dim wmiObj, processObjCol
    processNameStr = "'" & processNameStr & "'"

    Set wmiObj = GetObject("WinMgmts:{impersonationLevel=Impersonate}")
    Set processObjCol = wmiObj.ExecQuery("SELECT Name FROM Win32_Process Where Name = " & processNameStr)

    If processObjCol.Count = 0 Then
        isRunningProcess = False
    Else
        isRunningProcess = True
    End If
End function

当我使用这些函数运行脚本时,我最终在processObjCol.Count上出现了这样的错误

线:115 查尔:2 错误:查询无效 代码:80041017 来源:SWbemObjectSet

在将几乎所有我能想到的内容发送到日志文件后,我发现它第一次正在通过Do Until循环运行,但在此之后是出现此错误的时候。我已经尝试在isRunningProcess结束时将wmiObj和processObjCol设置为Nothing而不更改错误。有什么想法吗?我是否需要终止WMI服务?

1 个答案:

答案 0 :(得分:0)

我不确定你是否仍然需要这方面的帮助,或者你已经弄明白了但是你仍然在那里遗漏了一些关于你的查询的信息。在提供的示例中,在两行上尝试这些更新。

Function isRunningProcess(processNameStr)
    status = false
    Dim wmiObj, processObjCol
    Set wmiObj = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    Set processObjCol = wmiObj.ExecQuery("SELECT * FROM Win32_Process WHERE Name ='" & processNameStr & "'")
    If processObjCol.Count <> 0 Then Status = True
    isProcessRunning = status
End function