NULL ExecutablePath в объекте процесса vbScript
Приветствия,
У меня есть следующий VBScript:
Option Explicit
Dim objWMIService, objProcess, colProcess
Dim strComputer, strList
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colProcess = objWMIService.ExecQuery _
("Select * from Win32_Process")
For Each objProcess in colProcess
MsgBox(objProcess.ExecutablePath)
'If InStr(objProcess.ExecutablePath, "EASE") <> 0 Then
' MsgBox("TERMINATING")
' objProcess.Terminate()
'End If
Next
Почему-то я получаю сообщение об ошибке в строке MsgBox(objProcess.ExecutablePath). Там написано "Недопустимое использование Null:" ExecutablePath "". Как ни странно, я не получаю эту ошибку, когда я раскомментирую закомментированные строки и закомментирую проблемную строку.
Как вы можете видеть, я пытаюсь завершить все процессы с определенным именем пути, но кажется, что сопоставление строк не работает, как будто что-то не так с исполняемым путем.
2 ответа
Эккехард дал хорошее объяснение проблемы, а именно, что Null не может быть неявно преобразован в строку. Теперь вот способ решить проблему.
Прежде чем пытаться использовать objProcess.ExecutablePath, проверьте, является ли оно пустым:
For Each objProcess in colProcess
if not isnull(objProcess.ExecutablePath) then
MsgBox objProcess.ExecutablePath
'If InStr(objProcess.ExecutablePath, "EASE") <> 0 Then
' MsgBox("TERMINATING")
' objProcess.Terminate()
'End If
end if
Next
Как MsgBox
нужна строка для отображения и Null не может быть stringyfied, ваш MsgBox
строка (кстати: скобки не допускаются) потерпит неудачу .ExecutablePathes
; InStr(), однако, позволяет первому параметру быть Нулевым (см. Документы). Доказательства:
>> MsgBox Null
>>
Error Number: 94
Error Description: Invalid use of Null
>> p = Instr(Null, "whatever")
>>
>> WScript.Echo TypeName(p)
>>
Null
Так что избавьтесь от диагностики или напишите Sub/Function, которая имеет дело с Null (и, возможно, с другими пограничными случаями, такими как Empty) соответствующим образом.