strComputer = "." Set WshShell = CreateObject("WScript.Shell") Set objFso = CreateObject("Scripting.FileSystemObject") Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") strPath = WshShell.ExpandEnvironmentStrings("%TEMP%\monitor.vbs") If Not MonitorRunning Then Call MonitorProcess Else Wscript.Echo "First script has been restarted." End If Wscript.Echo "First script is running." Wscript.Sleep 5000 Wscript.Echo "First script is ending." Wscript.Quit Call QuitMonitor Wscript.Quit Function MonitorRunning blnProcessStarted = False Set colProcesses = objWMIService.ExecQuery _ ("SELECT * FROM WIN32_Process") For Each objProcess in colProcesses If InStr(objProcess.CommandLine, "monitor.vbs") > 0 Then blnProcessStarted = True End If Next MonitorRunning = blnProcessStarted End Function Sub MonitorProcess Set objFile = objFso.CreateTextFile(strPath, True) With objFile .WriteLine "strComputer = "".""" .WriteLine "Set WshShell = CreateObject(""WScript.Shell"")" .WriteLine "Set objWMIService = GetObject(""winmgmts:\\"" & strComputer & ""\root\cimv2"")" .WriteLine "Set objEventSource = objWMIService.ExecNotificationQuery _" .WriteLine " (""SELECT * FROM __InstanceDeletionEvent WITHIN 1 WHERE "" _" .WriteLine " & ""TargetInstance ISA 'Win32_Process'"")" .WriteBlankLines 1 .WriteLine "Do" .WriteLine " Set objEvent = objEventSource.NextEvent()" .WriteLine " strCommandLine = objEvent.TargetInstance.CommandLine" .WriteLine " If InStr(strCommandLine, """ & WScript.ScriptName & """) > 0 Then" .WriteLine " intReturn = WshShell.Run(strCommandLine,,False)" .WriteLine " End If" .WriteLine "Loop" .Close End With Set objFile = Nothing intReturn = WshShell.Run("cscript.exe " & Chr(34) & strPath & Chr(34), 0, False) End Sub Sub QuitMonitor Set colProcesses = objWMIService.ExecQuery _ ("SELECT * FROM WIN32_Process") For Each objProcess in colProcesses If InStr(objProcess.CommandLine, "monitor.vbs") > 0 Then objProcess.Terminate End If Next intResult = objFso.DeleteFile(strPath, True) End Sub