It turns out that there was a problem with the path I was passing to the LaunchApplication call.
Once I got the return code and passed it to FormatMessage to interpret it things started looking up...
I added a test to check the Windows version because I only wanted to install those runtimes if the program was running under XP and the resulting installation program now behaves pretty close to how I want it to behave.