十三,MFC 执行exe

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值