我使用以下代码通过CreateProcess()API执行“taskkill”命令。
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
TCHAR cmd[] = TEXT("taskkill /F /T /IM <exe name>");
if (CreateProcess(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, & pi))
{
// wait for child process to exit
DWORD waitForStatus = WaitForSingleObject(pi.hProcess, 10000);
// close process and thread handles
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
/* code to throw exception based on the return value waitForStatus */
}
else
{
/* code to throw exception if CreateProcess() failed */
}
我观察到的是,如果进程没有运行,任务kill失败,但CrateProcess()并没有指示错误,如何从CreateProcess得到这个错误?
是否有可能即使使用/F开关,进程也不会被taskkill杀死?
1条答案
按热度按时间rekjcdws1#
CreateProcess 仅负责生成/创建成功的子进程(在您的情况下为 * taskkill.exe *),因此它返回 TRUE。
你的代码负责监控子进程,并在它结束时获取它的退出代码,在关闭它的句柄之前调用[MS.Learn]: GetExitCodeProcess function (processthreadsapi.h)即可:
颠倒句柄关闭的顺序(这不是强制性的,但逻辑上线程在其进程之前结束)。