Launching Windows Executables with C++: Using ::CreateProcess

  1. Introduction
  2. Using ::CreateProcess
  3. Controlling the Process
  4. Conclusion


When it comes to launching Windows executables with C++, there are a few options available. One of the most popular and efficient ways to do so is using the ::CreateProcess function. This function allows you to launch an executable and control various aspects of the process, such as its priority and the way it interacts with the user.

Using ::CreateProcess

To use ::CreateProcess, you first need to set up a few structures that will hold the information about the executable you want to launch and the process that will be created. These structures include the STARTUPINFO and PROCESS_INFORMATION structures, which contain information about the process's appearance and the process itself, respectively.

Once these structures are set up, you can call ::CreateProcess, passing in the path to the executable, the command line arguments, and the two structures mentioned above. Here's an example:

STARTUPINFO si = { sizeof(si) };
if (::CreateProcess(L"C:\Path\To\Executable.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
    // Process created successfully
    // Error creating process

In this example, we're launching an executable located at "C:PathToExecutable.exe" with no command line arguments. The ::CreateProcess function returns a boolean value indicating whether the process was created successfully or not.

Controlling the Process

Once the process is created, you can control various aspects of it using the PROCESS_INFORMATION structure. For example, you can get the process ID using pi.dwProcessId, and you can wait for the process to exit using the ::WaitForSingleObject function.

You can also modify the priority of the process using the ::SetPriorityClass function, and you can interact with the process's standard input, output, and error streams using the handles in the STARTUPINFO structure.


Using ::CreateProcess to launch Windows executables with C++ is a powerful and efficient way to control processes and interact with them. By setting up the necessary structures and calling the function with the appropriate arguments, you can launch an executable and control various aspects of the process's behavior.

Click to rate this post!
[Total: 0 Average: 0]

Related posts

Leave a Reply

Your email address will not be published. Required fields are marked *

Go up

Below we inform you of the use we make of the data we collect while browsing our pages. You can change your preferences at any time by accessing the link to the Privacy Area that you will find at the bottom of our main page. More Information