簡體   English   中英

QProcess.execute()一個DOS命令

[英]QProcess.execute() a DOS command

我'試圖調用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()問題:它在所有情況下都不起作用(它適用於安裝而不是用於卸載文件夾)。

任何幫助將不勝感激。

來自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是一個啟動程序的靜態成員函數,等待它完成然后返回進程的退出代碼。

注意:我必須刪除對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以了解如何使用此功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM