2012-11-14 49 views
0

拜,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'」。奇怪的是,我沒有得到這個錯誤,當我取消註釋評論行並註釋掉問題行。

正如你所看到的,我試圖終止具有特定路徑名的所有進程,但似乎字符串匹配不起作用,就像可執行文件路徑有問題。

回答

1

Ekkehard對此問題給出了很好的解釋,即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 
+0

+1用於實現* one *可能的解決方案*和*正確調用MsgBox 。 –

1

由於MsgBox需要一個字符串來顯示和Null不能被字符串化,您的MsgBox行(btw:沒有圓括號允許)將不合格.ExecutablePathes;但是,InStr()允許第一個參數爲空(請參閱文檔)。證據:

>> MsgBox Null 
>> 
Error Number:  94 
Error Description: Invalid use of Null 
>> p = Instr(Null, "whatever") 
>> 
>> WScript.Echo TypeName(p) 
>> 
Null 

因此擺脫了診斷或寫一個Sub /函數與空(也許還有其他邊界線的情況下比如空)以適當的方式交易。

+0

你是什麼意思沒有括號?鑑於傳遞給'msgbox'的值是有效的,無論是否使用圓括號,代碼都可以正常工作。 –

+0

WRT括號在調用子時,請參閱http://blogs.msdn.com/b/ericlippert/archive/2003/09/15/52996.aspx –