You can also use TProcess from "process" unit. While it's piping mechanism is broken (i.e. you cannot get the program output using it), the non-piped mode works just fine. You can control if your program should wait for it, or run it in parallel.

But if the called process uses something like ReadLn, there is no help.