3
1)我開始一個過程用的ShellExecuteEx殺進程開始的ShellExecuteEx
2)檢索PID與
GetProcessId(shellExInfo.hProcess)
示例代碼:
SHELLEXECUTEINFO shellExInfo;
shellExInfo.cbSize = sizeof(SHELLEXECUTEINFO);
shellExInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
shellExInfo.hwnd = NULL;
shellExInfo.lpVerb = "open";
shellExInfo.lpFile = processToStart.c_str();
shellExInfo.lpParameters = processParams.c_str();
shellExInfo.lpDirectory = NULL;
shellExInfo.nShow = SW_SHOW;
shellExInfo.hInstApp = NULL;
ShellExecuteEx(&shellExInfo); // start process
GetProcessId(shellExInfo.hProcess); // retrieve PID
現在我要殺死開始使用給定的PID進程!這怎麼可能?
THX
使用'CreateProcess()'而不是'ShellExecute/Ex()'來運行可執行文件。它不僅是首選的API,而且還返回進程ID和進程句柄,因此您不必手動調用'GetProcessId()'。 –
@RemyLebeau但ShellExecute是運行進程需要權限提升(「runas」操作)的唯一方式。 –
@MonahTuk並不完全正確。雖然「runas」是運行提升進程的唯一*官方API,但有一個*非官方* ['CreateProcessElevated()'](https://www.codeproject.com/Articles/19165/Vista-UAC-The -Definitive-Guide)API(以及其他),它使用與ShellExecute()在內部使用的相同高程API。 –