如果我在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");
错误:未知错误
答案 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对象的错误代码。