有时候 多进程程序操作的时候非常容易出现进程死掉的境况 进程一死掉 后续的就是不可预料的东西了 因此 要想办法重启他
自己前两天做项目的时候就遇到这个问题 因此在网上找到了一些代码 修改了一下 保存下来吧
1
2 BOOL CSIM_ServerDlg::RestartProccess(CString strProcessName/*需要关闭的程序名称*/)
3 {
4 CString strProcessName="";
5
6 DWORD iProcessID=0;
7 HANDLE hProcess;
8 int iNumProcess=0;
9
10 //EnumProcesses方法
11 DWORD m_allProcessArray[1024], dwArraySize, m_i_processNum;
12
13 HMODULE hMod;//句柄
14 char m_szProcessName[1024]="";//获取名称
15 // 获取进程标识列表.
16 if ( !EnumProcesses( m_allProcessArray, sizeof(m_allProcessArray), &dwArraySize ))
17 {
18 return FALSE;
19 }
20 //计算有多少个进程.
21 iNumProcess = dwArraySize / sizeof(DWORD);
22 //查找每个进程.
23 for ( int i = 0; i < iNumProcess; i++ )
24 {
25 iProcessID=m_allProcessArray[i];
26 hProcess = OpenProcess( PROCESS_TERMINATE /*必不可少*/| PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE , iProcessID );
27 // 获取进程名称.
28 if ( hProcess )
29 {
30 if ( EnumProcessModules( hProcess, &hMod, sizeof(HMODULE),&dwArraySize))
31 {
32 GetModuleBaseName( hProcess, hMod, m_szProcessName, sizeof(m_szProcessName) );
33 strProcessName.Format("%s",m_szProcessName);
34 strProcessName.MakeUpper();
35 if(strProcessName.Find(strProcessName) == 0)
36 {
37 TerminateProcess(hProcess,0);
38 CloseHandle(hProcess);
39 break;
40 }
41 }
42 }
43 }
44 Sleep(100);
45 ShellExecute(this->m_hWnd , "open" , strProcessName , "" , "" , SW_SHOW);
46
47 //此处应该Sleep
48 //Sleep(5000); //等待程序打开
49 return 0;
50 }
posted on 2009-08-15 14:38
李佳 阅读(606)
评论(0) 编辑 收藏 引用