44 QObject(parent), mName(name), mLastExecutablePath(
"")
46 mProcess =
new QProcess(
this);
49 mProcess->setProcessChannelMode(QProcess::MergedChannels);
50 mProcess->setReadChannel(QProcess::StandardOutput);
65 QString absolutePathToExe = this->getExecutableInBundlesAbsolutePath(executable);
67 this->
launch(absolutePathToExe, arguments);
72 if (executable.isEmpty() || this->
isRunning())
75 this->internalLaunch(executable, arguments);
80 return mProcess->state() == QProcess::Running;
85 return mProcess->write(data);
90 return mProcess->waitForStarted(msecs);
95 return mProcess->waitForFinished(msecs);
98 QString ProcessWrapper::getExecutableInBundlesAbsolutePath(QString exeInBundle)
100 QString absolutePathToExe = exeInBundle;
102 if (!QFileInfo(absolutePathToExe).isAbsolute())
105 absolutePathToExe = absolutePathToExe.trimmed();
106 absolutePathToExe = QDir::cleanPath(absolutePathToExe);
108 if (!QFileInfo(absolutePathToExe).exists())
109 reportError(QString(
"Cannot find %1 [%2]").arg(mName).arg(absolutePathToExe));
111 return absolutePathToExe;
114 void ProcessWrapper::internalLaunch(QString executable, QStringList arguments)
119 report(QString(
"Launching %1: [%2 %3]").arg(mName).arg(executable).arg(arguments.join(
" ")));
121 if(arguments.isEmpty())
122 mProcess->start(executable);
124 mProcess->start(executable, arguments);
126 mLastExecutablePath = executable;
void reportError(QString msg)
void launchWithRelativePath(QString executable, QStringList arguments=QStringList())
void launch(QString executable, QStringList argument=QStringList())
ProcessWrapper(QString name="executable", QObject *parent=NULL)
qint64 write(const char *data)
bool waitForStarted(int msecs=30000)
bool waitForFinished(int msecs=30000)
virtual ~ProcessWrapper()
boost::shared_ptr< class ProcessReporter > ProcessReporterPtr
static QString getBundlePath()
return the folder where the bundle or executable are located.