|  | // ThriftCommon.cpp : Common functions for sample Thrift client and server | 
|  | // | 
|  |  | 
|  | #include "ThriftCommon.h" | 
|  |  | 
|  | namespace thriftcommon | 
|  | { | 
|  | //---------------------------------------------------------------------------- | 
|  | //Launch child process and pass R/W anonymous pipe handles on cmd line. | 
|  | //This is a simple example and does not include elevation or other | 
|  | //advanced features. | 
|  | // | 
|  | bool LaunchAnonPipeChild(std::string app, boost::shared_ptr<TServerTransport> transport) | 
|  | { | 
|  | #ifdef _WIN32 | 
|  | PROCESS_INFORMATION pi; | 
|  | STARTUPINFOA si; | 
|  | GetStartupInfoA(&si);  //set startupinfo for the spawned process | 
|  | char handles[MAX_PATH];  //Stores pipe handles converted to text | 
|  |  | 
|  | sprintf(handles, "%s %d %d", app.c_str(), | 
|  | (int)boost::shared_dynamic_cast<TPipeServer>(transport)->getClientRdPipeHandle(), | 
|  | (int)boost::shared_dynamic_cast<TPipeServer>(transport)->getClientWrtPipeHandle()); | 
|  |  | 
|  | //spawn the child process | 
|  | if (!CreateProcessA(NULL, handles, NULL,NULL,TRUE,0,NULL,NULL,&si,&pi)) | 
|  | { | 
|  | GlobalOutput.perror("TPipeServer CreateProcess failed, GLE=", GetLastError()); | 
|  | return false; | 
|  | } | 
|  |  | 
|  | CloseHandle(pi.hThread); | 
|  | CloseHandle(pi.hProcess); | 
|  | #endif | 
|  | return true; | 
|  | } | 
|  | } |