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;
}
请大家帮忙看看 谢谢
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;
}
请大家帮忙看看 谢谢
if(hProcess == NULL) return;
不过还是感谢ls
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); 肯定有问题,你注释调试试
这样
===========================
这句已经关闭了线程,下面的WaitForSingleObject又有什么意义呢?
我用OpenProcess(...) 引用计数变为2 Current process的句柄表就又维护一个目标进程的handle
然后我用TerminateProcess(...) 引用计数又变为1 引用计数为1 系统怎么可能会清除该内核对象.????