首页 >后端开发 >C++ >如何在 C 中使用 ::CreateProcess 启动和管理 Windows 可执行文件?

如何在 C 中使用 ::CreateProcess 启动和管理 Windows 可执行文件?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-02 13:02:29358浏览

How to Launch and Manage Windows Executables with ::CreateProcess in C  ?

在 C 语言中调用 ::CreateProcess 来启动和管理 Windows 可执行文件

本文将演示如何在 C 语言中使用 ::CreateProcess 函数启动 Windows 可执行文件,等待其完成,并正确处理其终止。

启动可执行文件

::CreateProcess 函数接受多个参数,包括可执行路径和命令行参数。要启动 EXE,请在路径参数中指定可执行文件的路径:

<code class="cpp">STARTUPINFO info = { sizeof(info) };
PROCESS_INFORMATION processInfo;

if (CreateProcess("C:\path\to\my.exe", NULL, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo)) {
  // Executable successfully launched
} else {
  // Handle launch failure
}</code>

等待完成

要等待可执行文件完成,请调用WaitForSingleObject 函数以 processInfo.hProcess 作为等待句柄:

<code class="cpp">WaitForSingleObject(processInfo.hProcess, INFINITE);</code>

这将阻塞当前线程,直到进程退出。

处理进程终止

可执行文件完成后,关闭进程和线程句柄以正确释放系统资源:

<code class="cpp">CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);</code>

示例代码

将它们放在一起,下面的代码演示了如何启动一个 EXE,等待其完成,并处理进程终止:

<code class="cpp">STARTUPINFO info = { sizeof(info) };
PROCESS_INFORMATION processInfo;

if (CreateProcess("C:\path\to\my.exe", NULL, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo)) {
  WaitForSingleObject(processInfo.hProcess, INFINITE);
  CloseHandle(processInfo.hProcess);
  CloseHandle(processInfo.hThread);
}</code>

此代码将启动指定的 EXE,等待其完成,然后正确关闭所有句柄,确保适当的清理和资源重新分配。

以上是如何在 C 中使用 ::CreateProcess 启动和管理 Windows 可执行文件?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn