CString temp=me.szExePath;
if(temp==m_path)
{
LPVOID lpmsgbuf;
HANDLE hProcess=OpenProcess(PROCESS_TERMINATE, FALSE, ps.th32ProcessID);  //ps是PROCESSENTRY32结构
TerminateProcess(hProcess, 0);
::WaitForSingleObject(hProcess, INFINITE); //这里调用失败 错误代码5  文本信息拒绝访问

CloseHandle(hProcess);
::DeleteFile(m_path);

FormatMessage( 
FORMAT_MESSAGE_ALLOCATE_BUFFER | 
FORMAT_MESSAGE_FROM_SYSTEM | 
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 
(LPTSTR) &lpmsgbuf,
0,
NULL 
);
        MessageBox((LPTSTR) lpmsgbuf);
return;
                          }
请大家帮忙看看 谢谢

解决方案 »

  1.   

    在OpenProcess后加入
    if(hProcess == NULL) return;
      

  2.   

    加了 错误一样,还有如果hProcess=NULL 那TerminateProcess根本不会调用成功, 所以hProcess!=NULL
    不过还是感谢ls
      

  3.   

    你这断代码本来就有问题,我看了一下:
    TerminateProcess(hProcess, 0); //问题是All of the object handles opened by the process are closed. 
    所以hProcess就已经没有了为NULL.
    而::WaitForSingleObject(hProcess, INFINITE); 
    等待的是空句柄.
    If this handle is closed while the wait is still pending, the function's behavior is undefined.
    报5 Access is denied.  ERROR_ACCESS_DENIED 所以TerminateProcess(hProcess, 0); 肯定有问题,你注释调试试
      

  4.   

    HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS, FALSE, ps.th32ProcessID);
    这样
      

  5.   

    TerminateProcess(hProcess, 0); 
    ===========================
    这句已经关闭了线程,下面的WaitForSingleObject又有什么意义呢?
      

  6.   

    不对啊,刚改程序的时候 突然想到个问题: 进程一旦创建 那么系统便会建立一个 进程内核对象, 引用计数为1;
    我用OpenProcess(...)  引用计数变为2  Current process的句柄表就又维护一个目标进程的handle
    然后我用TerminateProcess(...)  引用计数又变为1 引用计数为1 系统怎么可能会清除该内核对象.????