QProcess.execute () команда DOS

Я пытаюсь вызвать команду DOS: subst с QProcess :

 QProcess process;
int returnCode=process.execute(QString("subst " + DLetter+"  "+mountPath));
qDebug()<<"returnCode"<<returnCode;
if (returnCode==0){
qDebug()<<"Mount "<<QString("subst " + DLetter+"  "+mountPath)
<<"error"<<process.errorString()<<"id"<<process.pid();
process.waitForFinished();
...
}else
qDebug()<<" mounting folder failed  "<<process.errorString();

Мои вопросы: достаточно ли позвонить execute() а также waitForFinished()? я в безопасности с вызовом execute () вместо start? потому что у меня были проблемы с start() : он работал не во всех случаях (он работал для монтирования и не для размонтирования папки).

Любая помощь будет оценена.

1

Решение

Из документации QProcess :: execute () в http://doc.qt.digia.com/qt/qprocess.html#execute

Вы должны сделать это:

int returnCode=process::execute(QString("subst " + DLetter+"  "+mountPath));
qDebug()<<"returnCode"<<returnCode;
if (returnCode==0){
qDebug()<<"Mount "<<QString("subst " + DLetter+"  "+mountPath)
<<"error"<<process.errorString()<<"id"<<process.pid();
}else
qDebug()<<" mounting folder failed  ";

Ключ QProcess :: execute — статическая функция-член, которая запускает программу, ожидает ее завершения и возвращает код завершения процесса.

Примечание: мне пришлось удалить нестатические вызовы process.waitForFinished () и process.errorString (), поскольку ни один из них не может работать из статического QProcess :: execute.

2

Другие решения

Если вы пытаетесь вызвать функцию DOS, попробуйте вызвать ее, используя

#include <process.h>
...
system( "dir c:\\temp > c:\\temp\\output.txt" );

но это сейчас устарело. Попробуйте использовать

int nRet= (int)ShellExecute( 0,"open","calc.exe",0,0,SW_SHOWNORMAL);
if ( nRet <= 32 )
{
DWORD dw= GetLastError();
char szMsg[250];
FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM,
0, dw, 0,
szMsg, sizeof(szMsg),
NULL
);
MessageBox( szMsg, "Error launching Calculator" );
}

обращаться http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx чтобы увидеть, как использовать эту функцию.

1

По вопросам рекламы [email protected]