經常使用程序結束進程,有時候會遇到結束進程失敗的情況,不知道該怎么辦了?希望哪位高手看到給個解決的辦法。
在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:拒絕訪問.