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("执行完毕");

        }   

  • 相关阅读:
    远程桌面工具mRemoteNG与Tsmmc
    敏感性Sensitivity和特异性Specificity的说明
    React教程:4 个 useState Hook 示例
    React Hooks究竟是什么呢?
    一步一步搭建前端监控系统:如何监控资源加载错误?
    Promise的三兄弟:all(), race()以及allSettled()
    JavaScript中this究竟指向什么?
    编译器与Debug的传奇:Grace Murray Hopper小传
    21个React开发神器
    8种常见数据结构及其Javascript实现
  • 原文地址:https://www.cnblogs.com/LuffysMan/p/6564313.html
Copyright © 2011-2022 走看看