第一个Method:
1 //启动应用程序 2 VOID RunApplication(LPTSTR lpFilename, LPTSTR args) 3 { 4 //WinExec(lpFilename, SW_SHOW); 5 //return; 6 SetErrorMode(SEM_FAILCRITICALERRORS); 7 PROCESS_INFORMATION pi; 8 ::ZeroMemory(&pi, sizeof(pi)); //初始化进程信息pi 9 STARTUPINFO si; 10 memset(&si,0,sizeof(si)); 11 si.cb=sizeof(si); 12 si.wShowWindow=SW_HIDE; 13 si.dwFlags=STARTF_USESHOWWINDOW; 14 CreateProcess(lpFilename, args, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); 15 /* 16 HWND hWnd; 17 GetWindowThreadProcessId(hWnd,&pi.dwProcessId); 18 */ 19 WaitForSingleObject(pi.hProcess, INFINITE); 20 21 DWORD ExitCode; 22 //是否退出 23 GetExitCodeProcess(pi.hProcess,&ExitCode); 24 //0-返回正常 or 返回异常 25 if(ExitCode == 0) 26 { 27 RunApp(_T("baodian.rsm")); 28 } 29 else 30 { 31 RunApp(_T("baodian.vms")); 32 } 33 34 35 CloseHandle(pi.hThread); 36 CloseHandle(pi.hProcess); 37 38 39 }
第二个Medthd:
1 VOID RunApp(LPTSTR lpFilename, LPTSTR args) 2 { 3 //WinExec(lpFilename, SW_SHOW); 4 //return; 5 6 PROCESS_INFORMATION pi; 7 ::ZeroMemory(&pi, sizeof(pi)); //初始化进程信息pi 8 STARTUPINFO si; 9 memset(&si,0,sizeof(si)); 10 si.cb=sizeof(si); 11 si.wShowWindow=SW_SHOW; 12 si.dwFlags=STARTF_USESHOWWINDOW; 13 ::CreateProcess(lpFilename, args, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); 14 SAFE_CLOSE(pi.hProcess); //关闭进程句柄 15 }