程序运维让程序不死,守护进程必不可少。MFC下的代码,亲测可用.
1.关闭进程killprocess()
KillProcess(CString sExeName)
{
HANDLE hSnapShot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapShot == 0)
return;
PROCESSENTRY32 thePE;
thePE.dwSize = sizeof(PROCESSENTRY32);
//遍历正在运行的第一个系统进程
bool Status = Process32First(hSnapShot, &thePE);
bool bHaveFlag = false;
DWORD ProcessID = 0;
while (Status)
{
Status = Process32Next(hSnapShot, &thePE);
// if(0 == wcscmp(thePE.szExeFile,L""))
CString sFindName = thePE.szExeFile;
CString sTemp = sExeName.Mid(0, sFindName.GetLength());
if (sFindName == sTemp)
{
bHaveFlag = true;
ProcessID = thePE.th32ProcessID;
//结束指定的进程 ProcessID
if (!TerminateProcess(OpenProcess(PROCESS_TERMINATE || PROCESS_QUERY_INFORMATION, false, ProcessID), 0))
{
AfxMessageBox(L"无法终止指定的进程!", MB_ICONWARNING || MB_OK);
}
else
{
AfxMessageBox(L"进程结束!", MB_ICONWARNING || MB_OK);
break;
}
}
}
CloseHandle(hSnapShot);
}
2.启动进程
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = TRUE;
//启动该进程
BOOL bRet = ::CreateProcess(NULL, AppName.GetBuffer(AppName.GetLength()), NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
if (bRet)
{
::CloseHandle(pi.hThread);
::CloseHandle(pi.hProcess);
}
else
{
}