命令行关闭,尽管使用QProcess::startDetached()
Command Line closing despite using QProcess::startDetached()
我试图在我的Qt应用程序中通过cmd.exe中的批处理文件打开服务器。尽管我使用QProcess::startDetached()来启动命令行,但它在启动后立即关闭。服务器正在启动,但是进程没有"服务",而是被杀死了。下面是我的代码:
void DICOMReceiver::startReceiver()
{
QProcess receiver;
boost::filesystem::path dbDir = boost::filesystem::absolute(databaseDirectory.toStdString());
receiver.startDetached("cmd.exe", QStringList() << "/c" <<
"dcmrcv.bat" << "AETitle:11112" << "-dest " << dbDir.string().c_str());
receiver.waitForStarted();
}
当我在cmd.exe中手动运行批处理文件时,它按预期工作。有人知道如何保持进程运行,以便我可以使用服务器吗?
-
startDetached
为静态函数。你不需要流程实例 -
您应该将工作目录传递给
startDetached
。据我所知,它"关闭"是因为批处理文件不存在,它正在寻找它。 -
你的
waitForStarted()
调用是一个无操作,因为startDetached
方法不知道任何关于你的receiver
实例。你只是写了一些模糊的c++来欺骗你。当使用Qt时,没有办法等待一个分离的进程启动,一个分离的进程是"即发即弃"的。 -
不要使用
waitForXxx
方法,因为它们阻塞了它们所在的线程,并使UI无响应。使用信号槽连接并编写异步代码。
所以,你的方法应该固定如下:
void DICOMReceiver::startReceiver()
{
boost::filesystem::path dbDir =
boost::filesystem::absolute(databaseDirectory.toStdString());
// FIXME
const QString batchPath = QStringLiteral("/path/to/the/batch/file");
QProcess::startDetached("cmd.exe", QStringList() << "/c"
<< "dcmrcv.bat" << "AETitle:11112" << "-dest "
<<< dbDir.string().c_str(), batchPath);
}
相关文章:
- 使用QProcess执行命令,并将结果存储在QStringList中
- 终止 QProcess 不会终止子进程
- 在 Qt(C++) 中使用 QProcess 解压缩 - 提取目录问题
- 当QProcess需要用户使用Qt输入时,如何阅读
- 如何在 Qt5 中执行多个 QProcess
- Q维德格特关闭事件(..)未使用 QProcess::terminate() 调用
- 如何在 Linux 下执行 shell 命令 unsing QProcess?
- 当进程结束时,如何保持由 QProcess 执行的命令?
- QProcess无法通过QPushButton执行终端线路命令
- QProcess::readAllStandardOutput() 和换行符
- 使用 QProcess 将命令发送到服务器
- 使用qprocess将参数传递给批处理
- 无法使用QProcess在cmd.exe中执行复制命令
- QProcess不启动java应用程序
- Qt - 如何将"more"数据写入QProcess?
- 运行自定义可执行文件,QProcess 立即退出,退出代码为 1
- 如何使用 QProcess 设置参数以运行类文件?
- Qt:无法对类型为"QProcess::P rocessError"的参数进行排队 - QProcess::P rocessError(FailedToStart)
- 在 QProcess 中执行 shell 命令
- Qt QProcess 如何写入标准?