有時候 多進程程序操作的時候非常容易出現(xiàn)進程死掉的境況 進程一死掉 后續(xù)的就是不可預(yù)料的東西了 因此 要想辦法重啟他
自己前兩天做項目的時候就遇到這個問題 因此在網(wǎng)上找到了一些代碼 修改了一下 保存下來吧
1
2 BOOL CSIM_ServerDlg::RestartProccess(CString strProcessName/*需要關(guān)閉的程序名稱*/)
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 // 獲取進程標(biāo)識列表.
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 //此處應(yīng)該Sleep
48 //Sleep(5000); //等待程序打開
49 return 0;
50 }
posted on 2009-08-15 14:38
李佳 閱讀(617)
評論(0) 編輯 收藏 引用