I've just checked my code, and it seems that it isn't ideal - I've written a routine called 'ShellExecuteAndWait' (which waits until the dialog closes), but the code doesn't seem to be up to par, and my notes tell me it hasn't been tested as thoroughly as it should be.

Due to that (and it being wrong for .Net), it is probably best if I don't post it - at least not unless you can't get a .Net version working properly.