2009. 9. 25. 04:28

[WScript.Shell] Run 과 Exec


-  [Method] Run, Exec

Dim WshShell : Set WshShell = CreateObject("WScript.Shell")
intError = WshShell.Run (strCommand [, intWindowStyle] [, bWaitOnReturn])

 

WshShell.Run "%windir%\notepad" & WScript.ScriptFullName

' cf, 반환값 없이 단독 실행시에는 괄호로 묶지 않는다.


intError = WshShell.Run("notepad " & WScript.ScriptFullName, 1, True)
intError = WshShell.Run ("setup.exe", 1, true)

 

-----------------------------------------------------------------------------------

Dim WshShell : Set WshShell = CreateObject("WScript.Shell")
Dim oExec : Set oExec = WshShell.Exec("calc")

Do While oExec.Status = 0
     WScript.Sleep 100
Loop

WScript.Echo oExec.Status

 

' Status Return Values

'     0  : The job is still running. 
'     1  : The job has completed. 

-----------------------------------------------------------------------------------

' Run 과 Exec 의 가장 큰 차이

'=> Run 은 실행만 하지만, Exec는 실행과 동시에 객체(object)를 생성한다.

'    따라서 Exec를 통한 실행은 생성된 객체를 이용한 후속 작업이 용이하다.

 

Set FSO = Wscript.CreateObject("Scripting.FileSystemObject")
Set Shell = Wscript.CreateObject("Wscript.Shell")
TempName = FSO.GetTempName
TempFile = TempName

Shell.Run "cmd /c ping -n 3 -w 1000 157.59.0.1 >" & TempFile, 0, True

Set TextFile = FSO.OpenTextFile(TempFile, 1)
Do While TextFile.AtEndOfStream <> True
    strText = TextFile.ReadLine
    If Instr(strText, "Reply") > 0 Then
        Wscript.Echo "Reply received."
        Exit Do
    End If
Loop

TextFile.Close
FSO.DeleteFile(TempFile)

 

' 아래는 동일한 결과는 가지는 Exec 를 통한 실행이다.

' 실행을 통해 반환되는 StdOut 에 접근하기위해 임시파일 만들고 할 필요가 없다.

 

Dim Shell : Set Shell = WScript.CreateObject("WScript.Shell")
Dim ExecObject : Set ExecObject = Shell.Exec ("cmd /c ping -n 3 -w 1000 157.59.0.1")
Do While Not ExecObject.StdOut.AtEndOfStream
    strText = ExecObject.StdOut.ReadLine
Loop


출처 : http://ancdesign.pe.kr/60