具体的情况如下:
比如我们执行如下命令:sc
这个时候cmd.exe就会创建一个sc进程
我现在想的如何可以在他们执行超时的情况下结束掉cmd和SC这两个进程
CMD的进程还好结束,因为他的是我们直接创建的
可以直接用TerminateProcess(pi.hProcess,0);
但是由他创建的sc这个进程又如何结束呢
我这里提供一点示例代码:
-----------------------
strcat(SystemDir,"dllcache\\cmd.exe /c ");
strcat(SystemDir,cmdstr);//cmdstr是我们自己输入的命令
CreateProcess(NULL,SystemDir,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi);
if(pi.dwProcessId != 0)
{
DWORD cout,dwRead;
if(::WaitForSingleObject(pi.hThread,10000) == WAIT_TIMEOUT)
TerminateProcess(pi.hProcess,0);
---------------------------------------------------------------------------
上面的代码也只能在超时后结束掉cmd这个进程
结束不了由他创建的子进程
希望大牛帮忙看一下
比如我们执行如下命令:sc
这个时候cmd.exe就会创建一个sc进程
我现在想的如何可以在他们执行超时的情况下结束掉cmd和SC这两个进程
CMD的进程还好结束,因为他的是我们直接创建的
可以直接用TerminateProcess(pi.hProcess,0);
但是由他创建的sc这个进程又如何结束呢
我这里提供一点示例代码:
-----------------------
strcat(SystemDir,"dllcache\\cmd.exe /c ");
strcat(SystemDir,cmdstr);//cmdstr是我们自己输入的命令
CreateProcess(NULL,SystemDir,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi);
if(pi.dwProcessId != 0)
{
DWORD cout,dwRead;
if(::WaitForSingleObject(pi.hThread,10000) == WAIT_TIMEOUT)
TerminateProcess(pi.hProcess,0);
---------------------------------------------------------------------------
上面的代码也只能在超时后结束掉cmd这个进程
结束不了由他创建的子进程
希望大牛帮忙看一下
#include <tlhelp32.h>
TCHAR *szFileName = _T("xxx.exe");
CString str;
PROCESSENTRY32 pe;
HANDLE hSnapShot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
pe.dwSize = sizeof(PROCESSENTRY32);
if (::Process32First(hSnapShot, &pe ))
{
do
{
if (_tcsicmp(pe.szExeFile, szFileName) == 0)
{
HANDLE hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe.th32ProcessID);
if( hProcess != NULL)
{
if(::TerminateProcess(hProcess, 0))
{
str.Format(_T("%s已经被成功Killed!"), szFileName);
MessageBox(str);
break;
}
else
{
str.Format(_T("终止进程%s失败!"), szFileName);
MessageBox(str);
break;
}
}
else
{
str.Format(_T("无法访问进程%s!"), szFileName);
MessageBox(str);
break;
}
}
}
while(::Process32Next(hSnapShot,&pe));
}
并且不知道一定要运行外部程序
这个程序还可以执行一般的系统命令
比如:dir c:\
如果这些东西超时的话直接结束CMD就OK了
但是有时又是外部命令
所以不好区分
还有就是通过名字来结束进程好象容易出现误杀的情况
比如执行dir c:\
这样就不能正常运行了