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

5
我正在努力寻找解决问题的方法,但我根本不知道如何解决。
我正在为我创建的一些程序创建用户界面(这样你只需通过简单地按下一个按钮就可以启动可执行文件)。所以我想使用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;
}

嗯,看起来一个叫做HelloWorld的程序会输出“Hello World”,这也是你所看到的。 - ExpatEgghead
是的,它会输出,但然后就崩溃了(并询问是否要向微软发送报告(不知道报告在英语中怎么称呼))。 - jj01
helloworld.exe 能自己运行吗? - ExpatEgghead
你在启动进程后是否添加了 proc->waitForFinished(); - Shf
现在已经添加了,但它仍然崩溃。 - jj01
显示剩余6条评论
1个回答

6

QProcess有3个用于启动外部进程的函数,如下:

  • start
  • execute
  • startDetached

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

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

由于您只发布了少量代码,我们无法确定您之后要做什么。这段代码是在一个结束的函数中吗?还是您试图检索进程的输出?如果是这样,请务必在使用start()时调用waitForStarted。

如果你只想运行进程而不等待它完成,并且你的程序不影响与进程交互,那么请使用startDetached。

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

我的计划是通过按下按钮来简单地执行该exe。 - jj01
可执行文件应该完成,因为它将要创建一个新文档(通过按下按钮,它应该调用一个可执行文件,打开一个现有文件,更改它并将更改保存在一个新文件中)。 - jj01
1
除了waitForStarted函数外,还有一个waitForFinished函数。此外,如果您实例化了一个QProcess对象,请确保将其错误信号连接到一个槽。 - TheDarkKnight
1
如果startDetached无法工作,那么你传递可执行文件路径的方式可能存在问题。 - TheDarkKnight
已将其添加到原始帖子中 - jj01
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接