Steven Edwards wrote: > I guess there is no other way of doing this without using WinExec? > > + if (retval > 32) /* Found */ > + { > + TRACE("%s/%s => %s/%s\n", lpFile, lpOperation, cmd, lpstrProtocol); > + if (*lpstrProtocol) > + retval = execute_from_key(lpstrProtocol, lpFile, iShowCmd, is32); > + else > + retval = (is32) ? WinExec(cmd, iShowCmd) : WinExec16(cmd, iShowCmd); > + } > I did not actually write that part, nor most of this code. Mainly what I did was to combine the existing routines. The only problem I was trying to solve was that ShellExecuteEx ignored parameters from the registry. Originally I had written a routine for handling the parameters. It was suggested to me that much of that already existed. I had not noticed that because the two shell execute routines were in two different source files. I guess I am not sure what the problem is with WinExec. Originally ShellExecuteEx used CreateProcessA and ShellExecute used WinExec, which simply calls CreateProcessA. I could certainly directly call CreateProcessA if that is preferable.