CreateProcess

时间:2018-01-23 04:17:35

标签: c++ windows service createprocess

我用C ++编写了一个Windows服务程序。它执行的任务之一是运行用PowerBuilder编写的非常大的业务应用程序。它执行大量数据库进程并使用SharePoint来回传输数据。 PowerBuilder应用程序可以在某个位置中止它,可能的原因是因为服务有一个有限的桌面堆栈'与普通桌面应用相比。 作为测试,我们尝试使用名为AlwaysUp的通用服务应用程序来运行PowerBuilder应用程序,并且它完全没有任何问题。我很难过为什么AlwaysUp没有问题。以下是我用于启动PowerBuilder应用程序的代码:

   // report running status
   ServiceStatus.dwCurrentState = SERVICE_RUNNING;
   SetServiceStatus(hStatus, &ServiceStatus);

   // run the application
   event = CreateEvent(0, FALSE, FALSE, 0);
   if ( CreateProcess( NULL, CommandLine, NULL, NULL, FALSE,
            DETACHED_PROCESS | dwPriority, NULL,
            szModule, &si, &pi ) == 0 ) {
      // CreateProcess Failed
      return 0;
   }

   // wait for either the process to end or stop event
   WaitHandles[0] = pi.hProcess;
   WaitHandles[1] = event;
   do {
      dwError = WaitForMultipleObjects(2, WaitHandles, FALSE, 60000);
      switch ( dwError ) {
         case WAIT_OBJECT_0:
            // process ended
            bRunning = FALSE;
            break;
         case WAIT_OBJECT_0+1:
            // event triggered
            bRunning = FALSE;
            break;
         case WAIT_TIMEOUT:
            // timeout
            break;
         default:
            // error
            bRunning = FALSE;
            break;
      }
   } while ( bRunning );

   // close the handles
   CloseHandle(pi.hProcess);
   CloseHandle(pi.hThread);
   CloseHandle(event);

0 个答案:

没有答案