QProcess不能在win32系统上运行?

时间:2012-05-01 21:34:28

标签: c++ qt

如果我在Windows XP和Windows 32位系统中以编程方式传递用户主目录,则进程方法无效

以下代码可以正常使用:

 QProcess process;
 process.execute("C:/DOCUME~1/pjo/myprok/tmp/APP.exe");

不工作代码:

这里我使用QDir :: homePath

获取APP.exe的路径
    process.execute("C:/Documents and Settings/pjo/myprok/tmp/APP.exe");

errorString返回" UnKnown错误"

我尝试使用start方法也行不通:

B不工作代码:

    process.start("C:/Documents and Settings/pjo/myprok/tmp/APP.exe");

错误:未找到路径

    process.start("C:/DOCUME~1/pjo/myprok/tmp/APP.exe");

错误:未知错误

2 个答案:

答案 0 :(得分:2)

execute()是一个静态函数,因此它应该像这样调用:

QProcess::execute("C:/Documents and Settings/pjo/myprok/tmp/APP.exe");

您说您以编程方式获取主目录,但您显示的代码不会这样做。也许你正在创建这样的路径:

QProcess::execute(QDir::homePath() + "APP.exe");

然后路径将错过/在目录和文件名之间,如下所示:

"C:/Documents and Settings/pjo/myprok/tmpAPP.exe"

答案 1 :(得分:1)

您的问题可能是由于路径中的空格(C:\ Documents and Settings ...)引起的引用问题。 请注意,start()有两个重载:

void    start ( const QString & program, OpenMode mode = ReadWrite )
void    start ( const QString & program, const QStringList & arguments, OpenMode mode = ReadWrite )

您正在使用第一个,它将可执行路径和所有args放在一个字符串中,并期望它被正确引用。没有引用,“c:\ documents”被解释为可执行文件,“和”“设置......”等被解释为参数。

第二个版本单独获取参数,并将正确解释可执行文件路径,无需任何引用。因此,最简单的方法是使用

process.start("C:/Documents and Settings/pjo/myprok/tmp/APP.exe", QStringList());

这确保了第二个版本的使用,并且可以避免所有引用问题。 我建议总是使用那个超载。

这同样适用于execute(),如前所述,这是一个静态方法,因此不会设置QProcess对象的错误代码。