0
我正在使用以下代碼使用CreateProcess()api執行'taskkill'命令。檢查使用CreateProcess執行的命令的返回值
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殺死?
關閉句柄的順序,我在msdn鏈接中看到它https://msdn.microsoft.com/en-us/library/windows/desktop/ms682512(v=vs.85).aspx –
在您關閉句柄無關緊要 - 它們屬於您的流程,並且不會以任何方式影響子流程。 –
是的,我意識到這一點,我提到它......它只是一個語法上的糖...線程在進程之前被銷燬(在代碼中) – CristiFati