一、杀死指定进程
// 杀死指定进程
BOOL KillProcessFromName(CString strProcessName)
{
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pe;
pe.dwSize = sizeof(PROCESSENTRY32);
if (!Process32First(hSnapShot, &pe))
{
return FALSE;
}
strProcessName.MakeLower();
while (Process32Next(hSnapShot, &pe))
{
CString scTmp = pe.szExeFile;
scTmp.MakeLower();
if (!scTmp.Compare(strProcessName))
{
DWORD dwProcessID = pe.th32ProcessID;
HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE, FALSE, dwProcessID);
::TerminateProcess(hProcess, 0);
CloseHandle(hProcess);
return TRUE;
}
scTmp.ReleaseBuffer();
}
strProcessName.ReleaseBuffer();
return FALSE;
}
二、判断指定进程是否存在
// 判断进程是否存在
BOOL IsProcessExit(const WCHAR* strFilename)
{
BOOL bRet = FALSE;
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
return FALSE;
PROCESSENTRY32 pe32 = { 0 };
pe32.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hProcessSnap, &pe32))
{
do
{
if (_wcsicmp(pe32.szExeFile, strFilename) == 0)
{
bRet = TRUE;
break;
}
}
while (Process32Next(hProcessSnap, &pe32));
}
else
{
bRet = FALSE;
}
CloseHandle(hProcessSnap);
return bRet;
}
三、启动指定进程
// 启动进程
void ProcessStart(CString strSrvName)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
ZeroMemory(&pi, sizeof(pi));
int num = 0;
while (!CreateProcess(NULL, (LPWSTR)strSrvName.GetBuffer(), NULL, NULL, false, 0, NULL, NULL, &si, &pi))
{
num++;
if (10 == num)
{
WriteLog("启动进程失败");
break;
}
}
}