45 QObject(parent), mName(name), mLastExecutablePath(
"")
47 mProcess =
new QProcess(
this);
50 mProcess->setProcessChannelMode(QProcess::MergedChannels);
51 mProcess->setReadChannel(QProcess::StandardOutput);
58 mProcess->terminate();
64 return mProcess.data();
69 QString absolutePathToExe = this->getExecutableInBundlesAbsolutePath(executable);
71 this->
launch(absolutePathToExe, arguments);
76 if (executable.isEmpty() || this->
isRunning())
79 this->internalLaunch(executable, arguments);
84 return mProcess->state() == QProcess::Running;
89 return mProcess->write(data);
94 return mProcess->waitForStarted(msecs);
99 return mProcess->waitForFinished(msecs);
102 QString ProcessWrapper::getExecutableInBundlesAbsolutePath(QString exeInBundle)
104 QString absolutePathToExe = exeInBundle;
106 if (!QFileInfo(absolutePathToExe).isAbsolute())
109 absolutePathToExe = absolutePathToExe.trimmed();
110 absolutePathToExe = QDir::cleanPath(absolutePathToExe);
112 if (!QFileInfo(absolutePathToExe).exists())
113 reportError(QString(
"Cannot find %1 [%2]").arg(mName).arg(absolutePathToExe));
115 return absolutePathToExe;
118 void ProcessWrapper::internalLaunch(QString executable, QStringList arguments)
123 report(QString(
"Launching %1: [%2 %3]").arg(mName).arg(executable).arg(arguments.join(
" ")));
125 if(arguments.isEmpty())
126 mProcess->start(executable);
128 mProcess->start(executable, arguments);
130 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.
Namespace for all CustusX production code.