1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
// 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;
}
}
|