我有一个问题我希望有人可以帮助我。我在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服务?
答案 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