我做的一个应用程序,要在执行时检查是否已经在运行了。
HANDLE hMutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"my.exe");
if(!hMutex)
{
HANDLE m_hMutex=CreateMutex(NULL,TRUE,"my.exe");
if(GetLastError()==ERROR_ALREADY_EXISTS) <--但是在这取到的GetLastError 的值是0
{
CloseHandle(m_hMutex); m_hMutex是有值的
m_hMutex=NULL;
该怎么解决呢???
}
}
HANDLE hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if(hProcessSnap != INVALID_HANDLE_VALUE)
{
PROCESSENTRY32 pe32;
pe32.dwSize=sizeof(pe32);
BOOL bMore=Process32First(hProcessSnap,&pe32);
DWORD pID=GetCurrentProcessId();
HANDLE pHandle;
while(bMore)
{
if(pe32.th32ProcessID!=pID&&!strcmp(pe32.szExeFile, MutexName))
{
if(MutexName=="Tracetest1.exe")
{
pHandle=OpenProcess(PROCESS_TERMINATE,FALSE,pID);
TerminateProcess(pHandle,0);
}
}
....
}
} 用这个会把我后运行的这个进程本身杀死,而不是把原来内存中已经存在的进程杀死?
HANDLE hMutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"my.exe");
if(!hMutex)
{
HANDLE m_hMutex=CreateMutex(NULL,TRUE,"my.exe");
if(GetLastError()==ERROR_ALREADY_EXISTS) <--但是在这取到的GetLastError 的值是0
{
CloseHandle(m_hMutex); m_hMutex是有值的
m_hMutex=NULL;
该怎么解决呢???
}
}
HANDLE hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if(hProcessSnap != INVALID_HANDLE_VALUE)
{
PROCESSENTRY32 pe32;
pe32.dwSize=sizeof(pe32);
BOOL bMore=Process32First(hProcessSnap,&pe32);
DWORD pID=GetCurrentProcessId();
HANDLE pHandle;
while(bMore)
{
if(pe32.th32ProcessID!=pID&&!strcmp(pe32.szExeFile, MutexName))
{
if(MutexName=="Tracetest1.exe")
{
pHandle=OpenProcess(PROCESS_TERMINATE,FALSE,pID);
TerminateProcess(pHandle,0);
}
}
....
}
} 用这个会把我后运行的这个进程本身杀死,而不是把原来内存中已经存在的进程杀死?
解决方案 »
- VC++6.0中,如何从工程中删除一个文件?
- 请教高手vc++远程连接access???
- 求助,HUGE_VAL是什么意思啊?
- VC++为什么我的程序ctrl+F5就能执行,而生成的EXE(或F5)双击就绝对不执行???附代码!
- 动态建立控件的问题
- 求教:关于hook键盘消息的一点儿疑惑。
- 关于无损图象处理的一个问题!有兴趣的请进
- 怎么在windows下用vc写一个udp server端的例子?
- MFC线程中使用SendMessage导致几秒的未响应
- MFC绘制极坐标
- 哪位朋友有比较完整的IO 事件选择模型源码!能给一套吗?就是那种对各位异常处理得比较全面的那种!!给CSDN里所有的朋友拜个早年!合家幸福
- 程序中启动超级旋风下载的奇怪问题
===================
if((pe32.th32ProcessID!=pID)&&(strcmp(pe32.szExeFile, MutexName)==0))
HANDLE m_hMutex=CreateMutex(NULL,TRUE,"my.exe");
if(GetLastError()==ERROR_ALREADY_EXISTS)
但是得不到错,我debug查的getlasterror中的值是0
pHandle=OpenProcess(PROCESS_TERMINATE,FALSE,pe32.th32ProcessID);但是openprocess失败,pHandle值为0,我getlasterror返回值87,参数错误,why?怎么解决?
尝试使用PROCESS_ALL_ACCESS来OpenProcess