mazin -
Well after giving it more thought....kenedy is probably more correct than I am.
Since my method actually requires a window be created at some point...if no window is ever created then it just hangs.
So with that in mind and actually running with what kenedy has already outlined I'd suggest the following:
Func _App_Tick($at)
While ProcessExists ($at) = 1
Sleep (250)
WEnd
EndFunc
Run("App_Name.exe /Switchs"); Orginal file execution
_App_Tick(proc_1.exe)
_App_Tick(proc_2.exe)
_App_Tick(proc_3.exe)
...
All this does is create a fuction called _App_Tick but you can name it what ever...that just came to mind.

Which is used to save a tad bit on code...or a lot of code depending how many sub-proc's get spawned.
One should ideally just pass one active executable to the fuction...thus as one executable is exited...the newly created one should be passed to the fuction...so on and so forth.
So if you start "Setup_Photoshop.exe" you would then just pass that executable:
_App_Tick(Setup_Photoshop.exe)
Now lets say durning that time frame "Setup_Photoshop.exe" launch's a sub-proc "Setup_QuickTime.exe" but "Setup_Quicktime.exe" starts and finishs prior to "Setup_Photoshop.exe" being completed...in this case there would be no need to pass "Setup_QuickTime.exe" to the fuction, since "Setup_Photoshop.exe" would still keep the script sleeping.
Now lets say "Setup_Photoshop.exe" exits but in doing so "Setup_Remote_Agent.exe" is spawned...in this case we would pass "Setup_Remote_Agent.exe" to the fuction:
_App_Tick(Setup_Remote_Agent.exe)
We would continue to do this as long as one proc is killed off and a new one is spawned.
So we end up with some thing that looks roughly like so:
Func _App_Tick($at)
While ProcessExists ($at) = 1
Sleep (250)
WEnd
EndFunc
Run("Setup_Photoshop.exe /VERYSILENT"); Orginal file execution
_App_Tick(Setup_Photoshop.exe)
_App_Tick(Setup_Remote_Agent.exe)
Hehe any ways kenedy was right and I was wrong.