经常使用程序结束进程,有时候会遇到结束进程失败的情况,不知道该怎么办了?希望哪位高手看到给个解决的办法。
在VC编写PC端程序,可以通过获取管理权限来取得结束进程的权限,PDA上不知道如何做.
这是使用的代码。
BOOL PDATerminateProc(CString ProcToKill)
{
int cntTerminate=0;
HANDLE hSnapshot=INVALID_HANDLE_VALUE;
PROCESSENTRY32 procEntry;
procEntry.dwSize=sizeof(PROCESSENTRY32);
CString szProcName;
hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (hSnapshot)
{
if (Process32First(hSnapshot,&procEntry))
{
szProcName=procEntry.szExeFile;
if (!szProcName.CompareNoCase(ProcToKill))
{
HANDLE hProcess = OpenProcess(
PROCESS_TERMINATE,FALSE,procEntry.th32ProcessID);
if(hProcess)
{
if(!TerminateProcess(hProcess,0))
{
CString strError;
strError.Format(_T("TerminateProcess() fail\n Error:%d"),GetLastError());
MessageBox(NULL,strError,L"error",MB_OK|MB_ICONINFORMATION);
}
cntTerminate++;
}
else
{
CString strError;
strError.Format(_T("OpenProcess() fail\n Error:%d"),GetLastError());
if(GetLastError()==ERROR_ACCESS_DENIED)
strError=_T("error!")+strError;
MessageBox(NULL,strError,L"error",MB_OK|MB_ICONINFORMATION);
}
}
}
while(Process32Next(hSnapshot,&procEntry))
{
szProcName=procEntry.szExeFile;
if (!szProcName.CompareNoCase(ProcToKill))
{
HANDLE hProcess = OpenProcess(
PROCESS_TERMINATE,FALSE,procEntry.th32ProcessID);
if(hProcess)
{
if(!TerminateProcess(hProcess,0))
{
CString strError;
strError.Format(_T("TerminateProcess() fail\n Error:%d"),GetLastError());
MessageBox(NULL,strError,L"error",MB_OK|MB_ICONINFORMATION);
}
}
else
{
CString strError;
strError.Format(_T("OpenProcess() fail\n Error:%d"),GetLastError());
if(GetLastError()==ERROR_ACCESS_DENIED)
strError=_T("Error!")+strError;
MessageBox(NULL,strError,L"error",MB_OK|MB_ICONINFORMATION);
}
if (cntTerminate++>=1)
{
break;
}
}//else MessageBox(NULL,procEntry.szExeFile,L"debug",MB_OK|MB_TOPMOST);
}
// CloseToolhelp32Snapshot(hSnapshot);
CloseHandle(hSnapshot);
}
return (cntTerminate>0);
}
返回的错误是ERROR 5:拒绝访问.