ShellExecute wäre eine Alternative (
Unit ShellAPI) Allerdings sehe ich keinen Grund, warum dein Programm auf das Prozessende wartet. WaitForSingleObject wird ja nur dann aufgerufen, wenn bWait true ist ..
//Edit: Oder versuch mal testweise das GetExitCodeProcess auszukommentieren