Я пытаюсь вызвать команду 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()
: он работал не во всех случаях (он работал для монтирования и не для размонтирования папки).
Любая помощь будет оценена.
Из документации 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.
Если вы пытаетесь вызвать функцию 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 чтобы увидеть, как использовать эту функцию.