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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
#include "ChildProcess.h"
#include <asyncprocess.h>
#include "file_logger.h"
#include "fileutils.h"
#include "processreaderthread.h"
#include <globals.h>
#if !USE_IPROCESS
#include "UnixProcess.h"
#endif
ChildProcess::ChildProcess() {}
ChildProcess::~ChildProcess()
{
#if USE_IPROCESS
m_process->Detach();
wxDELETE(m_process);
#else
m_childProcess->Detach();
wxDELETE(m_childProcess);
#endif
}
void ChildProcess::Start(const wxArrayString& args)
{
if(args.IsEmpty()) { return; }
#if USE_IPROCESS
// Build command line from the array
wxString command;
command << args[0];
::WrapWithQuotes(command);
for(size_t i = 1; i < args.size(); ++i) {
wxString argument = args[i];
::WrapWithQuotes(argument);
command << " " << argument;
}
// Launch the process
m_process = ::CreateAsyncProcess(this, command, IProcessCreateDefault | IProcessStderrEvent);
#else
m_childProcess = new UnixProcess(this, args);
#endif
}
void ChildProcess::Write(const wxString& message) { Write(FileUtils::ToStdString(message)); }
void ChildProcess::Write(const std::string& message)
{
#if USE_IPROCESS
m_process->WriteRaw(message);
#else
m_childProcess->Write(FileUtils::ToStdString(message));
#endif
}
|