David,
Just brainstorming here. Maybe you could split your call into three phases:
setup target dir
spawn
restore target dir
You could use the Win32 function GetCurrentDirectory to save off the GL directory, then use SetCurrentDirectory just before spawning to set the default path. Then, instead of using CreateProcess, use the standard routines in process.h:
int spawnv(int mode, const char *cmd, char *const *argv)
You can use mode _P_WAIT to wait synchronously for the child process to terminate, or use _P_NOWAIT which will return the process identifier. You can then use the _cwait() at a later time to wait for that process to die.
Would that work? Or, is there a specific reason you actually want GL to exit while the emulator is running? If this is the case, maybe an intermediate daemon task could be created which would actually be responsible for spawning, waiting, and respawning GL.
Rich