QProcess.execute() 一个 DOS 命令

QProcess.execute() a DOS command

本文关键字:DOS 命令 一个 execute QProcess      更新时间:2023-10-16

我正在尝试调用DOS命令: substQProcess

 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() 的文档 at 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.waitForDone()和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 了解如何使用此功能。