zoukankan      html  css  js  c++  java
  • 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("执行完毕");

        }   

  • 相关阅读:
    CodeForces.1174D.EhabandtheExpectedXORProblem(构造前缀异或和数组)
    HDU-6187.DestroyWalls(最大生成树)
    HDU.6186.CSCource.(前缀和数组和后缀和数组)
    <每日一题>Day 9:POJ-3281.Dining(拆点 + 多源多汇+ 网络流 )
    <每日一题> Day8:CodeForces-996A.Hit the Lottery(贪心)
    最小割 + 网络流变体
    <每日一题> Day7:CodeForces-1166C.A Tale of Two Lands (二分 + 排序)
    <每日一题> Day6:HDU递推专题完结
    <每日一题> Day5:简单递推两题
    POJ-3122.Pie(二分法最大化平均值)
  • 原文地址:https://www.cnblogs.com/LuffysMan/p/6564313.html
Copyright © 2011-2022 走看看