如何检查CreateProcess是否正在工作或运行



我使用CreateProcess来启动我的.exe。我想知道是否一切都很好,或者当我试图启动这个.exe.时,它是否遇到了错误

据我所知,我需要使用GetLastError(),但我试图模拟进程路径中的错误,但它返回了相同的上一个错误代码。

所以我想知道CreateProcess是否成功,以及这个过程是否完成。我该怎么做才能做到这一点?

谢谢。

CreateProcess:的文档中详细说明了您要查找的所有信息

如果函数成功,则返回值为非零。

如果函数失败,则返回值为零。若要获取扩展的错误信息,请调用GetLastError。

请注意,函数在进程完成初始化之前返回。如果找不到所需的DLL或无法初始化,则进程将终止。要获取进程的终止状态,请调用GetExitCodeProcess。

如果需要等待目标进程终止,请对调用CreateProcess所填写的process_INFORMATION中返回的进程句柄调用WaitForSingleObject。

由于您控制目标流程,因此您可以自由选择任何方案,以便从流程的退出代码中确定成功或失败。您可以在进程句柄转换到信号状态后的任何时间调用GetExitCodeProcess,也可以在调用CloseHandle之前调用它。

我能想到几种方法:

#1-枚举

您可以枚举进程并检查PID是否在列表中。查看EnumProcesses

#2-检查退出代码

您可以使用GetExitCodeProcess。如果进程仍在运行,它将返回STILL_ACTIVE(259(

#3-过程手柄

WaitForSingleObject使用具有SYNCHRONIZE访问权限的进程句柄,如果进程未运行,则返回0。

注意:您不应该为dwMilliseconds参数指定INFINITE,因为在进程状态发出信号(进程终止(之前,函数不会返回

最新更新