怎样执行一个外部exe并等待它执行完后再执行后面的代码

时间:2021-01-08 19:51:45
要调用一个exe文件进行一些处理,当这个exe文件执行成功后再对处理过的内容进行二次加工。执行一个exe文件可以用ShellExecute或WinExec,但在通过这两个函数执行exe后就会马上执行后面的代码,这样导致exe还没执行结束就去尝试使用exe的输出内容,会报错。以下是我的处理逻辑:
if(ShellExecute (NULL,"open","encryptfile.exe","c:\\check.txt -o c:\\result.dat",NULL,SW_SHOW) >=(HANDLE) 32)
{
     //对result.dat进行处理
}

4 个解决方案

#1


用进程句柄来同步试试

#2


用CreateProcess来执行一个EXE,用WaitForSingleObject来进行等待

#3


CreateProcess encryptfile.exe
然后等待进程句柄,直到进程退出后再往下走.

#4


SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL ;
ShExecInfo.lpVerb =NULL;
ShExecInfo.lpFile = "cmd.exe";
ShExecInfo.lpParameters = m_set;    
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_HIDE;
ShExecInfo.hInstApp = NULL;   
   
ShellExecuteEx(&ShExecInfo);

int ret=WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
if(ret!=WAIT_TIMEOUT)
{
AfxMessageBox("done");
}

#1


用进程句柄来同步试试

#2


用CreateProcess来执行一个EXE,用WaitForSingleObject来进行等待

#3


CreateProcess encryptfile.exe
然后等待进程句柄,直到进程退出后再往下走.

#4


SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL ;
ShExecInfo.lpVerb =NULL;
ShExecInfo.lpFile = "cmd.exe";
ShExecInfo.lpParameters = m_set;    
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_HIDE;
ShExecInfo.hInstApp = NULL;   
   
ShellExecuteEx(&ShExecInfo);

int ret=WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
if(ret!=WAIT_TIMEOUT)
{
AfxMessageBox("done");
}