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) соответствующим образом.

Другие вопросы по тегам