【问题标题】:QProcess.execute() a DOS commandQProcess.execute() 一个 DOS 命令
【发布时间】:2012-11-12 11:35:32
【问题描述】:

我正在尝试调用 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() 的问题:它并非在所有情况下都有效(它适用于安装,但不适用于卸载文件夹)。

我们将不胜感激。

【问题讨论】:

  • 我觉得你需要直接调用cmd。类似于: cmd /c subst X: c:\\Test
  • @drescherjm 我需要从我的应用程序执行我的命令 :)
  • 将该命令放入您的 process.execute 中,而不是您拥有的。
  • 是的,我已经有了,QString("subst " + DLetter+" "+mountPath) 是命令。
  • 我不是这个意思。该命令中的 cmd /c 在哪里?

标签: c++ qt command qprocess


【解决方案1】:

来自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 中工作。

【讨论】:

  • 如果您想查看错误执行的输出,您将需要使用非静态启动。我可以调查一下。我已经在 Windows 上做到了这一点。不是为了替代,而是为了处理和发送医学图像,这是我日常工作的一部分..
【解决方案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 了解如何使用此功能。

【讨论】:

  • 感谢您的回复。首先,我使用system() 调用我的命令,但 cmd 弹出并消失,我不希望在没有此弹出的情况下静默获取它(如果有避免这种情况的选项,请告诉我)所以我将其替换为QProcess,我将尝试ShellExecute() 看看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多