Natürlich geht das nicht. Wenn RunAndWaitShell auf Beendigung des Programms wartet, wird Dein weiterer Code erst danach ausgeführt.
Du musst die Funktion RunAndWaitShell ändern und dort nicht auf Beendigung, sondern auf "Input Idle" warten. Das Process-
Handle hast Du dort auch bereits und musst es nicht später umständlich mit ProcessExists wieder ermitteln.
Aber mal ganz von vorne: Hast Du probiert mit einem kleinen Testprogramm das Fenster der zuvor manuell gestarteten "EmpororMapper.exe" zu verschieben? Wenn das nicht geht, kannst Du Dir den Rest sparen.