La API
TerminateProcess "Mata" un proceso determinado. El primer parámetro no es el nombre del archivo ejecutable sino el Handle del proceso en cuestión que previamente debes conseguir con
OpenProcess.
Mira este ejemplo completamente funcional para conseguir matar un proceso conociendo el nombre de su ejecutable:
Código:
// Termina los procesos conociendo el nombre del exe
bool TerminateProcess(char* FileName)
{
DWORD Result = 0;
HANDLE Process = 0;
PROCESSENTRY32 proc = { sizeof(proc) };
HANDLE hSysSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hSysSnapshot != INVALID_HANDLE_VALUE && Process32First(hSysSnapshot, &proc)){
do{
if(!stricmp(proc.szExeFile, FileName)){
Result = proc.th32ProcessID;
if(Result)
Process = OpenProcess(PROCESS_ALL_ACCESS, false, Result);
if(Process){
Result = TerminateProcess(Process, 0);
CloseHandle(Process);
}
}
}while(Process32Next(hSysSnapshot, &proc));
}
CloseHandle(hSysSnapshot);
return (bool)Result;
}
Saludos.