Also, you can use exec and spawnl. They are useful if you need to specify command line parameters for the process you want to start, or even to change environment settings for it.
The differences between:
1) system, exec, spawnl and
2) CreateProcess
- methods from 1) are obsolete (DOS & console programming - can be run under DOS and Win);
- CreateProcess, besides it creates a new process it enables you to define security attributes for that process to create it suspended and run it whenever you need to, change its error mode, environment block, process' main window location (station, desktop, and position on screen). Very important is that it allows you to redirect standard input, output and error to whatever handle you might need.
- moreover, CreateProcess fills (as an [out] parameter) an user-supplied PROCESS_INFORMATION structure which contains handles to the process & its primary thread and also process ID and primary thread ID (thus enabling you to manipulate the newly created process by using PSAPI, for example)