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("執行完畢");

    }   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM