MFC调用批处理,等待执行完毕并获取其返回值

 请问,在MFC调用批处理后如何能检测到其返回值,因为要根据其返回值判断批处理是否运行成功。 
      假设批处理出错后   exit   /b   1 
      正常   exit   /b   0 
      那批处理结束以后,如何能判断其返回值是0还是1? 

解决方案一

运行批处理 

PROCESS_INFORMATION info; 
CreateProcess("c:\\aaa.bat ,NULL,NULL,NULL,FALSE,CREATE_DEFAULT_ERROR_MODE |NORMAL_PRIORITY_CLASS,NULL,NULL,NULL,&pinfo); 


批处理执行完毕后,什么时候执行完要自己猜测,获得EXit Code 
int code; 
GetExitCodeProcess(info.hProcess, &code); 

解决方案二

运行批处理 
PROCESS_INFORMATION info; 
CreateProcess("c:\\aaa.bat ,NULL,NULL,NULL,FALSE,CREATE_DEFAULT_ERROR_MODE |NORMAL_PRIORITY_CLASS,NULL,NULL,NULL,&pinfo); 


批处理执行期间,不断的FindWindow,就是这个aaa.bat的窗口,如果存在则跳过,500毫秒后再检查,直到没找到,说明已完成并关闭了,发现aaa.bat已运行完毕后,就可以使用以下代码获得exit code了: 
int code; 
GetExitCodeProcess(info.hProcess, &code); 

============================================== 

 

 

解决方案三 


你的bat运行时,根据不同的运行的结果,在退出之前,建立一个同名文件,但内容不同,如运行的某处,要exit 1时,你这样: 
@echo 1> ExitCode.txt 
要exit 2时, 
@echo 2> ExitCode.txt 
程序运行之初要 
del ExitCode.txt 
这样,你只要不断的检测目录下是否有ExitCode.txt文件,如果有,说明已运行完毕,内容就是所要的ExitCode了。 

 

解决方案四

BOOL CallRegisterdllandocx(const CString& strPath )

{

    CString strRegToolName(_T("\\RegisterDllAndOcx.bat"));

    CString strRegToolPath = strPath;

    strRegToolPath.Append(strRegToolName);

    PROCESS_INFORMATION pi;

    STARTUPINFO si;

    ZeroMemory(&si,sizeof(si));

    si.cb   =   sizeof(si);

    si.hStdInput=GetStdHandle(STD_INPUT_HANDLE);

    si.lpReserved = NULL;

    si.lpDesktop = NULL;

    si.lpTitle = NULL;

    si.dwFlags = STARTF_USESHOWWINDOW;

    si.wShowWindow = SW_HIDE;

    si.cbReserved2 = NULL;

    si.lpReserved2 = NULL;

   if(!CreateProcess(NULL,strRegToolPath.LockBuffer(),NULL,NULL,FALSE,NULL,NULL,NULL,&si,&pi))   

    {

       //AfxMessageBox(_T("不能创建进程"));

       strRegToolPath.UnlockBuffer();

       return FALSE;

    }

    else 

    { 

       WaitForSingleObject(pi.hProcess,INFINITE);

       GetExitCodeProcess(pi.hProcess,&dwExitCode);

       CloseHandle(pi.hProcess);

       CloseHandle(pi.hThread);

       strRegToolPath.UnlockBuffer();

       return TRUE;

       //AfxMessageBox("执行完毕");

    }   

转载于:https://www.cnblogs.com/LuffysMan/p/6564313.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值