QProcess 未知错误

Posted

技术标签:

【中文标题】QProcess 未知错误【英文标题】:QProcess unknown error 【发布时间】:2013-11-09 08:20:47 【问题描述】:

我遇到了奇怪的问题。 QProcess 只是不工作!

而且错误未知。

我在标题中有全局变量

QProcess *importModule;

我得到了这个功能(我尝试了 startstartDetached 方法 btw)

    void App::openImport()
      importModule = new QProcess();
      importModule->setWorkingDirectory(":\\Resources");
      importModule->startDetached("importdb_module.exe");
      QMessageBox::information(0,"",importModule->errorString());

它只是输出error is unknown。它也不会启动其他 exe,例如

    void App::openImport()
      importModule = new QProcess();
      importModule->setWorkingDirectory("C:\\Program Files\\TortoiseHg");
      importModule->startDetached("hg.exe");
      QMessageBox::information(0,"",importModule->errorString());

我做错了什么? 还有其他方法可以从我的程序中运行一些.exe 吗? 或者可能是.bat 文件(运行exes)? (也用 QProcess 试过,不工作)

【问题讨论】:

【参考方案1】:

startDetached() 是一个静态方法,根本不对importModule 进行操作。 它开始一个过程,然后停止关心。因此importModule 中的error()/errorState() 与startDetached() 调用无关。你想要的是start()。 然而,由于 QProcess 是异步的,所以在 start() 返回之后什么都不会发生。您必须连接到started()error()finished() 信号才能了解结果。

connect(importModule, SIGNAL(started()), this, SLOT(importModuleStarted()));
connect(importModule, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(importModuleFinished(int, QProcess::ExitStatus)));
CONNECT(importModule, SIGNAL(error(QProcess::ProcessError)), this, SLOT(importModuleError(QProcess::ProcessError)));
importModule->start(QStringLiteral("importdb_module"), QStringList());

您也可以使用阻塞等待功能:

importModule->start(QStringLiteral("importdb_module"), QStringList());
importModule->waitForStarted(); // waits until starting is completed
importModule->waitForFinished(); // waits until the process is finished

但是,我强烈建议不要在主线程中使用它们,因为它们会阻塞 UI。

【讨论】:

哦,但是路径呢?我的意思是在这种情况下如何设置它们? 啊,忘记传递可执行文件名了。固定。 哦,谢谢,但我也指 .exe 的完整路径,或者它应该是这样的 QStringLiteral("somepath/importdb_module")? 你可以在里面指定完整路径,或者通过qt-project.org/doc/qt-5.0/qtcore/qprocessenvironment.html修改PATH

以上是关于QProcess 未知错误的主要内容,如果未能解决你的问题,请参考以下文章

获得 95% 发出未命名的兼容插件错误:未知:未知错误,打开

VS2010 打开时出现未知错误

aria2下载ftp未知错误

[提问]:“读取数据源出现未知错误:Serialization错误”?

给出未知错误的未知 Keydown 事件[关闭]

Appium 未知错误:处理命令时发生未知的服务器端错误。原始错误:重新安装需要“应用程序”选项