十三,MFC 执行exe

    技术2022-05-19  21

    方法一: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; }

     


    最新回复(0)