2012-05-01 3 views
0

Метод процесс не работает, если я прохожу каталог пользователя домой программно в Windows XP и Windows 32-битных системQProcess не работает на системах win32?

Ниже код работает отлично:

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

Не работает Код:

Здесь Я получаю путь app.exe используя QDir :: HOMEPATH

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

errorString возвращает «Unknow п ошибка»

Я попытался с помощью метода запуска и которым никогда не работает:

B Не работает Код:

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

Ошибка: Путь не найден

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

Ошибка: Неизвестная ошибка

ответ

1

Ваш вопрос, вероятно, из-за цитирование проблемы, вызванные пробелами в path (C: \ Documents and Settings ...). Обратите внимание, что есть две перегрузки для начала():

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

Вы используете первый, который принимает путь к исполняемому файлу и все аргументы в одну строку, и ожидает, что это будет правильно цитировал. Без цитирования «c: \ documents» интерпретируется как исполняемый файл и «и» «Настройки ...» и т. Д. В качестве аргументов.

Вторая версия принимает аргументы отдельно и корректно интерпретирует исполняемый путь без каких-либо цитирования. Таким образом, самый простой способ заключается в использовании

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

Это обеспечит второй вариант, который будет использоваться, и должен спасти вас от всех котирования вопросов. Я предлагаю всегда использовать эту перегрузку.

То же самое относится к execute(), который, как уже было сказано, статический метод, поэтому коды ошибок объекта QProcess не будут установлены.

+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" 
+0

спасибо @roku, вы правы. –

Смежные вопросы