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

        }   

  • 相关阅读:
    时空地图TimeGIS 可编辑ArcGIS的Shape矢量文件的地理信息系统
    快手 KSCAD 5.0 矢量图形设计软件
    DWG2SHP DXF2SHP 如何把AutoCAD的DWG,DXF文件转换为Esri ArcGIS的Shape文件
    火了网址
    GIS 网站参考
    快手4.0 (KSCAD)
    用词法分析器Flex过滤日志
    编译器工具 Flex Bison for Windows 简单入门例子
    针对于网络安全领域中基于PCAP流量的数据集
    RBAC权限框架_MVC权限框架
  • 原文地址:https://www.cnblogs.com/LuffysMan/p/6564313.html
Copyright © 2011-2022 走看看