How to get a sub-process' return code

后端 未结 2 978
被撕碎了的回忆
被撕碎了的回忆 2021-02-19 07:29

What is the method of getting the return value from spawning a sub-process within windows? It looks like ShellExecute() is simpler to use than is CreateProce

2条回答
  •  误落风尘
    2021-02-19 08:08

    Here is a complete code based in http://msdn.microsoft.com/en-us/library/windows/desktop/ms682512%28v=vs.85%29.aspx and the solution of hmjd:

    #include 
    #include 
    
    int main()
    {
      const size_t stringSize = 1000;
      STARTUPINFO si;
      PROCESS_INFORMATION pi;
      DWORD exit_code;
      char commandLine[stringSize] = "C:\\myDir\\someExecutable.exe param1 param2";
      WCHAR wCommandLine[stringSize];
      mbstowcs (wCommandLine, commandLine, stringSize);
    
      ZeroMemory( &si, sizeof(si) );
      si.cb = sizeof(si);
      ZeroMemory( &pi, sizeof(pi) );
    
      // Start the child process. 
      if( !CreateProcess( NULL,   // No module name (use command line)
          wCommandLine,   // Command line
          NULL,           // Process handle not inheritable
          NULL,           // Thread handle not inheritable
          FALSE,          // Set handle inheritance to FALSE
          0,              // No creation flags
          NULL,           // Use parent's environment block
          NULL,           // Use parent's starting directory 
          &si,            // Pointer to STARTUPINFO structure
          &pi )           // Pointer to PROCESS_INFORMATION structure
      ) 
      {
          printf("CreateProcess failed (%d).\n", GetLastError() );
          return -1;
      }
    
      // Wait until child process exits.
      WaitForSingleObject( pi.hProcess, INFINITE );
    
      GetExitCodeProcess(pi.hProcess, &exit_code);
    
      printf("the execution of: \"%s\"\nreturns: %d\n", commandLine, exit_code);
    
      // Close process and thread handles. 
      CloseHandle( pi.hProcess );
      CloseHandle( pi.hThread );
      return 0;
    }
    

    (runs as VS2005 console application in windows XP)

提交回复
热议问题