方法一:API 函数 ShellExecuteEx 执行exe
CString ss=_T("F://Win7-Vista_64bit//13123.exe");//绝对s路径 CString loadstr; CString loadhou; TCHAR path[MAX_PATH]; ::GetModuleFileName(NULL,path,MAX_PATH); loadstr.Format(_T("%s"),path); n= loadstr.GetLength(); loadhou=loadstr.Left(n-9); loadhou+=_T("setup.exe");//相对路径 LPCTSTR nvsetup; nvsetup=(LPCTSTR)loadhou; RunEXEAndWait(nvsetup , NULL,NULL, FALSE);
BOOL RunEXEAndWait(LPCTSTR szRunFile,LPCTSTR szRunParam,LPCTSTR szWorkPath,BOOL bShowWindow) { CFileFind filefind; BOOL bIsFinded = filefind.FindFile(szRunFile,0); filefind.Close(); if(bIsFinded == FALSE) { return FALSE; }
SHELLEXECUTEINFO NameServerseii; ZeroMemory(&NameServerseii, sizeof(NameServerseii)); NameServerseii.cbSize = sizeof(NameServerseii); NameServerseii.fMask = SEE_MASK_NOCLOSEPROCESS; NameServerseii.hwnd = NULL; NameServerseii.lpVerb = NULL; NameServerseii.lpFile = szRunFile; NameServerseii.lpParameters = szRunParam; NameServerseii.lpDirectory = szWorkPath; NameServerseii.hInstApp = NULL;
if(bShowWindow == TRUE) { NameServerseii.nShow = SW_SHOWNORMAL; } else { NameServerseii.nShow = SW_HIDE; }
if (!ShellExecuteEx(&NameServerseii)) { return FALSE; } }
方法二:API CreateProcess 执行exe
bool silentInstall = true; WORD windowMode = silentInstall ? SW_NORMAL : SW_HIDE; PROCESS_INFORMATION procInfo = { INVALID_HANDLE_VALUE, INVALID_HANDLE_VALUE, 0, 0 }; DWORD startupInfoFlags = STARTF_FORCEOFFFEEDBACK | // don't show an hourglass cursor STARTF_USESHOWWINDOW | // wShowWindow is valid 0; DWORD startupFlags = CREATE_NO_WINDOW | CREATE_PRESERVE_CODE_AUTHZ_LEVEL | CREATE_UNICODE_ENVIRONMENT | 0; STARTUPINFO startupInfo = { sizeof(STARTUPINFO), NULL, NULL, // desktop NULL, // console title 0, // dwX 0, // dwY 0, // dwXSize 0, // dwYSize 0, // dwXCountChars 0, // dwYCountChars 0, // dwFillAttribute startupInfoFlags, // flags windowMode, // windowm mode 0, // reserved NULL, // reserved INVALID_HANDLE_VALUE, // stdin INVALID_HANDLE_VALUE, // stdout INVALID_HANDLE_VALUE // stderr }; int n; CString ss=_T("F://Win7-Vista_64bit//13123.exe");//绝对 CString loadstr; CString loadhou; TCHAR path[MAX_PATH]; ::GetModuleFileName(NULL,path,MAX_PATH); loadstr.Format(_T("%s"),path); n= loadstr.GetLength(); loadhou=loadstr.Left(n-14); loadhou+=_T("setup.exe");//绝对路径 LPCTSTR nvsetup; nvsetup=(LPCTSTR)ss;
if(!CreateProcess(NULL,//pAppName, // Process name ss.GetBuffer(), // Cmd line params NULL, // No process attributes NULL, // No thread attributes FALSE, // Do not inherit handles startupFlags, // Above startup flags NULL, // Use environment of calling process NULL, // Directory to execute application from &startupInfo, // Startup Info params &procInfo)) // Param info params { AtlThrowLastWin32(); } //else //{ // // // // Thread handle is not needed // // // CloseHandle(procInfo.hThread);
// // // // Wait for setup.exe to finish // // // DWORD waitResult = WaitForSingleObject(procInfo.hProcess, INFINITE);
// switch(waitResult) // { // case WAIT_FAILED: // case WAIT_ABANDONED: // exitCode = 1; // break; // case WAIT_OBJECT_0: // GetExitCodeProcess(procInfo.hProcess, &exitCode); // } //}
//CloseHandle(procInfo.hProcess);
方法三:SHELLEXECUTEINFO
SHELLEXECUTEINFO te; memset(&te,0x00,sizeof(SHELLEXECUTEINFO));//清空内存的一定要加,不加会失败的。。。。。。 te.lpFile=L"\\Program Files\\tilemap\\HTdown.exe"; //亦可打开一个指定的文档。 te.lpVerb=L"open"; te.cbSize = sizeof(SHELLEXECUTEINFO); te.fMask = SEE_MASK_NOCLOSEPROCESS; te.hwnd = NULL; te.nShow = SW_SHOWNORMAL; ShellExecuteEx(&te); /*服务器请求*/ Sleep(1000); //关闭: if( te.hProcess != NULL) { TerminateProcess(te.hProcess,0); te.hProcess = NULL; }