我正在使用Qt (4.6.1)编写一个Windows应用程序,该应用程序使用QProcess类来执行Java应用程序。
以下是基本代码:
process = new QProcess(this);
connect( process, SIGNAL( started() ), this, SLOT( onProcessStarts() ) );
connect( process, SIGNAL( finished(int) ), this, SLOT( onProcessEnds(int) ) );
connect( process, SIGNAL( readyReadStandardOutput() ), this, SLOT( onProcessOutputs() ) );
connect( process, SIGNAL( error(QProcess::ProcessError)), this, SLOT(onProcessError(QProcess::ProcessError)));
QStringList arguments;
arguments << "-jar";
arguments << "absolute_path\app.jar"; //the java app that I want to execute
arguments << "-blah-blah"; //some java app's arguments
process->start( "java", arguments );
这是我启动Java应用程序的方法,它可以正常工作。但是,我只在我的Windows XP机器上进行了测试。当我在另一台安装了Windows 7的计算机上进行测试时,它失败了。
在Windows 7中,QProcess信号error(QProcess::ProcessError)在process->start(...)之后发出,给我带来了错误QProcess::FailedToStart。
我还测试了以下内容: QStringList arguments; arguments << "/c"; arguments << "java"; arguments << "-jar"; arguments << "absolute_path\app.jar"; //我想要执行的Java应用程序 arguments << "-blah-blah"; //一些Java应用程序的参数 process->start( "cmd.exe", arguments ); 但是,cmd.exe抱怨找不到Java...
我怀疑这里涉及到某些权限问题;我将可执行文件设置为以管理员身份运行,但是没有运气,所以我已经没有更多的想法...
显然,在Windows 7机器上安装了Java(从cmd.exe手动调用它可以工作)。