QProcess无法执行外部可执行文件

时间:2013-08-06 08:08:46

标签: windows qt windows-xp qprocess

我正在努力寻找解决问题的方法,但我根本不知道如何解决它。

我正在为我制作的某些程序创建一个用户界面(所以你可以通过简单地按一个按钮启动一个可执行文件)。 所以我想到了使用qt。

所以我读了很多关于QProcess的内容并尝试使用它。

在我的第一个可执行文件中,我尝试通过QProcess :: start()启动它,但它没有用,所以我用QProcess尝试了它:execute():

QProcess *proc = new QProcess(this);
QDir::setCurrent("C:\\DIRTOTHEEXE\\");
QString program="HELLO.exe";
proc->execute(program);

这完美地执行我的程序并且运行良好。

所以我尝试用我的其他exe做同样的事情,但它没有用

QProcess *myproc = new QProcess(this);
QDir::setCurrent("C:\\DIRTOTHEEXE\\");
QString program="HelloWorld.exe";
myproc->start(program);

被调用的可执行文件只打印“Hello World”并返回0。

所以现在我的问题是:什么可能导致这种行为,为什么我不能使用QProcess :: start()作为第一个可执行文件?

顺便说一句:我也尝试将workingDirectory()设置为exe的路径,但也没有用。

希望有人可以帮助我。

编辑: 所以程序执行但在打印出一行后立即崩溃。

编辑:这是HelloWorld来源。

#include <iostream>
using namespace std;

int main(int argc, char* argv[]) {
    cout<<"HELLO WORLD!!"<<endl;

    return 0;
}

1 个答案:

答案 0 :(得分:6)

QProcess有3个启动外部进程的功能,例如: -

  • 启动
  • 执行
  • startDetached

后两个,execute和startDetached是静态的,所以不需要QProcess的实例来调用它们。

如果你使用start,你至少应该调用waitForStarted()来正确设置进程。 execute()函数将等待进程完成,因此不需要调用waitForStarted。

由于您只发布了少量代码,我们无法确切地看到您之后要做的事情。函数中的代码是否结束,或者您是否正在尝试检索进程的输出?如果是这样,如果使用start(),你肯定应该调用waitForStarted。

如果您只想在不等待它完成的情况下运行该过程,并且您的程序不关心与该过程进行交互,那么请使用startDetached: -

QProcess::startDetached("C:\\DIRTOTHEEXE\\HELLO.exe");