Okay StarWarsKid - here is the general idea to get you going along with some explanation of what's going on. There are other ways to code this, but this should get you going. You might want to add a bit more logic or error checking as required for a production script to include logging and checking that the logs did write, etc...Break On Dim $SO ;Enable global settings of the KiXtart interpreter $SO =SetOption ('Explicit' ,'On' )$SO =SetOption ('NoVarsInStrings' ,'On' )$SO =SetOption ('NoMacrosInStrings' ,'On' ) ;Declare our vars Dim $ParentApp , $ChildApp Dim $WMICheck , $Timer Dim $CheckParent , $CheckChild ;Set our application process names for use with process check udf $ParentApp = 'calc.exe' $ChildApp = 'notepad.exe' ;Check to make sure the application file exists and if so run it If Exist ('%SystemRoot%\system32\' +$ParentApp ) Run '%SystemRoot%\system32\' +$ParentApp Else ;Add some code to log the error and quit the script or alert the user Quit @ERROR EndIf ;Check if WMI is working or not on the system $WMICheck = WMIConfirm ()If @ERROR ;Add some code to log the error and quit the script or alert the user Quit @ERROR Else If $WMICheck > 0 ;WMI tests seem okay continue with script EndIf EndIf ;Set a timer so we can get out of the loop if the parent app never runs $Timer = 0 While @ERROR = 0 And $Timer < 30 $Timer = $Timer + 1 $CheckParent = EnumProcess ($ParentApp ) Sleep 1 If $CheckParent > 0 ;The parent process was found so ;Set the timer higher to end the loop $Timer = 60 EndIf Loop ;Okay we assume that either CheckParent found the app running or the ;timer ran out, so lets check which one happened $CheckParent = EnumProcess ($ParentApp )If $CheckParent > 0 ;Sleep for 5 seconds to give the Parent Application time to startup all the way Sleep 5 ;Now run the Child Application Run '%SystemRoot%\system32\' +$ChildApp Else 'Parent process not found to be running' + @ERROR + ' - ' + @SERROR ? Quit 10 EndIf ;Now check that the Child Application is running $CheckChild = EnumProcess ($ChildApp )If $CheckChild = "" 'ERROR running child application: ' + @ERROR + ' - ' + @SERROR ?Else 'Child Application running with process id of: ' + $CheckChild ?EndIf ;Now exit out of the script Exit 0 ;UDF to confirm that WMI is working correctly Function WMIConfirm(optional $sComputer ) Dim $objWMIService , $objWMISetting , $colWMISettings $sComputer = IIf (Not $sComputer ,'' ,'\\' +Join (Split ($sComputer ,'\' ),'' ,3 )+'\' ) $objWMIService = GetObject ("winmgmts:{impersonationLevel=impersonate}!" +$sComputer +'root\cimv2' ) ; Failed - return 0 and exit with error value If @ERROR $WMIConfirm = 0 Exit Val ('&' + Right (DecToHex (@ERROR ), 4 )) EndIf $colWMISettings = $objWMIService.ExecQuery ("Select * from Win32_WMISetting" ) For Each $objWMISetting In $colWMISettings $WMIConfirm = $objWMISetting.BuildVersion Next Exit 0 EndFunction ;UDF to find the process ID of the applications Function EnumProcess($exe , optional $terminate , $sComputer ) Dim $winmgmts , $ExecQuery , $Process , $id , $GetObject , $Kill $sComputer = IIf (Not $sComputer ,'' ,'\\' +Join (Split ($sComputer ,'\' ),'' ,3 )+'\' ) $winmgmts ="winmgmts:{impersonationLevel=impersonate}!" +$sComputer +'root\cimv2' Select Case Val ($exe )>0 $ExecQuery ="select * from Win32_Process where ProcessId=" +'"' +$exe +'"' $GetObject =GetObject ($winmgmts ).ExecQuery ($ExecQuery ) For Each $Process In $GetObject If $terminate $Kill =$Process.Terminate EndIf $EnumProcess = $Process.name Next Case VarType ($exe )=8 $ExecQuery ="select * from Win32_Process where Name=" +'"' +$exe +'"' $GetObject =GetObject ($winmgmts ).ExecQuery ($ExecQuery ) For Each $Process In $GetObject If $terminate $Kill =$Process.Terminate EndIf $id =$Process.ProcessId $EnumProcess = "" +$Id + "|" + $EnumProcess Next $EnumProcess =Left ($EnumProcess ,Len ($EnumProcess )-1 ) Case 1 Exit 1 EndSelect EndFunction