GOFF Home
     Home      Products      Consulting & Solutions      Articles  
 
 C++ articles
   
 Call windows dll  
 Windows 9x services  
 CreateProcess()  
   
   
   
   
   










 Createprocess example
 
After seeing so many poor examples of executing an external process I decided to implement a good sample for you here.

Updated Feb 7, 2008

size_t ExecuteProcess(std::wstring FullPathToExe, std::wstring Parameters,
                                 size_t SecondsToWait)
{
     size_t iMyCounter = 0, iReturnVal = 0, iPos = 0;
     DWORD dwExitCode = 0;
     std::wstring sTempStr = L"";

     /* - NOTE - You should check here to see if the exe even exists */

     /* Add a space to the beginning of the Parameters */
     if (Parameters.size() != 0)
     {
          if (Parameters[0] != L' ')
          {
               Parameters.insert(0,L" ");
          }
     }

     /* The first parameter needs to be the exe itself */
     sTempStr = FullPathToExe;
     iPos = sTempStr.find_last_of(L"\\");
     sTempStr.erase(0, iPos +1);
     Parameters = sTempStr.append(Parameters);

     /*
          CreateProcessW can modify Parameters thus we
          allocate needed memory
     */
     wchar_t * pwszParam = new wchar_t[Parameters.size() + 1];
     if (pwszParam == 0)
     {
          return 1;
     }
     const wchar_t* pchrTemp = Parameters.c_str();
     wcscpy_s(pwszParam, Parameters.size() + 1, pchrTemp);

     /* CreateProcess API initialization */
     STARTUPINFOW siStartupInfo;
     PROCESS_INFORMATION piProcessInfo;
     memset(&siStartupInfo, 0, sizeof(siStartupInfo));
     memset(&piProcessInfo, 0, sizeof(piProcessInfo));
     siStartupInfo.cb = sizeof(siStartupInfo);

     if (CreateProcessW(const_cast<LPCWSTR>(FullPathToExe.c_str()),
                                  pwszParam, 0, 0, false,
                                  CREATE_DEFAULT_ERROR_MODE, 0, 0,
                                  &siStartupInfo, &piProcessInfo) != false)
     {
          /* Watch the process. */
          dwExitCode = WaitForSingleObject(piProcessInfo.hProcess,
                                                            (SecondsToWait * 1000));
     }
     else
     {
          /* CreateProcess failed */
          iReturnVal = GetLastError();
     }

     /* Free memory */
     delete[]pwszParam;
     pwszParam = 0;

     /* Release handles */
     CloseHandle(piProcessInfo.hProcess);
     CloseHandle(piProcessInfo.hThread);

     return iReturnVal;
}
 
 
 

Resources for
Microsoft Exchange
Data Backup
Tradewars
C++ Development
Business Partners

Information
News
RSS feeds
Investor relations
Jobs

     About Us           Contact