2012-11-14 5 views
0

인사에서 NULL ExecutablePath, 나는 다음과 같은 VBScript를 가지고 : 나는 줄있는 MsgBox (objProcess.ExecutablePath)에 오류가 발생하는 몇 가지 이유를 들어</p> <p>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 

합니다. 그것은 "Null의 잘못된 사용 : 'ExecutablePath'"라고 말합니다. 이상하게도 내가 코멘트 라인을 주석 처리하고 문제 라인을 주석 처리 할 때 나는이 에러를 얻지 못한다.

내가 볼 수 있듯이 특정 경로 이름으로 모든 프로세스를 종료하려고하지만 실행 경로에 문제가있는 것처럼 문자열 일치가 작동하지 않는 것처럼 보입니다.

답변

1

Ekkehard는 Null이 암시 적으로 문자열로 변환 될 수 없다는 문제에 대한 좋은 설명을주었습니다. 이제 여기에 문제를 해결하는 방법이 있습니다. 어떤 괄호로

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 * 가능한 솔루션 *을 구현하고 * MsgBox를 올바르게 호출하는 방법을 참조하십시오. . –

1

MsgBox은 표시 할 문자열이 필요하고 Null은 stringyfied가 될 수 없으므로 MsgBox 행 (btw : 괄호 허용 안 됨)은 불쾌한 경우 실패합니다. .ExecutablePathes; 그러나 InStr()에서는 첫 번째 매개 변수를 Null로 설정할 수 있습니다 (문서 참조). 증거 :

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

그래서 진단을 제거 또는 널 (그리고 빈 같은 아마 다른 경계선의 경우) 적절한 방법으로 다루는 하위/함수를 작성하세요.

+0

당신은 무엇을 의미합니까 허용 :이 null의 경우 확인 objProcess.ExecutablePath 사용하기 전에

? 'msgbox'에 전달 된 값이 유효하다면, 코드는 괄호가 사용되는지 여부에 상관없이 작동합니다. –

+0

하위를 호출 할 때 WRT 괄호가 필요합니다. http://blogs.msdn.com/b/ericlippert/archive/2003/09/15/52996.aspx –