1

私はDOSコマンドを呼び出そうとしています:substwith 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()か?startの代わりにexecute()を呼び出しても安全ですか?問題があったためstart():すべての場合に機能するわけではありませんでした(フォルダーのマウントには機能し、フォルダーのマウント解除には機能しませんでした)。

どんな助けでもありがたいです。

4

2 に答える 2

2

http://doc.qt.digia.com/qt/qprocess.html#executeのQProcess::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であり、プログラムを開始し、プログラムが終了するのを待ってから、プロセスの終了コードを返す静的メンバー関数です。

注:静的QProcess :: executeからはどちらも機能しないため、process.waitForFinished()およびprocess.errorString()への非静的呼び出しを削除する必要がありました。

于 2012-11-27T14:39:44.203 に答える
1

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を参照してください。

于 2012-11-24T11:08:52.107 に答える