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