【问题标题】:How to use cmd.exe commands in QProcess如何在 QProcess 中使用 cmd.exe 命令
【发布时间】:2020-08-18 15:49:43
【问题描述】:

我尝试在 Windows 命令提示符中运行命令类型,但进程没有启动。如果我尝试通过命令提示符直接使用此命令,它会起作用。 这是代码:

void MainWindow::firmware()
{
    QProcess *proc = new QProcess(this);
    QString dir("C:/Qtstatic/Examples/My/build-RBoxReader-Desktop_Qt_5_15_0_MSVC2019_64bit-Debug");
    proc->setWorkingDirectory(dir);
    QMessageBox msgBox;
    QString msg = "Current dir: %1";
    msg = msg.arg(proc->workingDirectory());
    msgBox.setText(msg);
    msgBox.exec();
    QString command("type");
    QStringList arguments;
    arguments << "my_file.txt";
    proc->start(command, arguments);
    if(!proc->waitForStarted()) {
        QMessageBox msgBox1;
        QString msg1 = "Process state: %1";
        msg1 = msg1.arg(proc->state());
          msgBox1.setText(msg1);
          msgBox1.exec();
        QMessageBox msgBox;
        QString msg = "Process didn't start";
          msgBox.setText(msg);
          msgBox.exec();
          return;
    }
    msg = "Process state: %1";
    msg = msg.arg(proc->state());
      msgBox.setText(msg);
      msgBox.exec();
    proc->waitForFinished (-1);
}

【问题讨论】:

    标签: qt qt5 qprocess


    【解决方案1】:

    鉴于我在您的代码中没有看到"cmd.exe",因此我无法理解您的期望。您的系统上没有 type.exe。您必须自己实际运行cmd.exe,并将type 作为参数传递给它:

    你会想要这样的东西:

    QString command = QStringLiteral("cmd.exe");
    QStringList arguments{QStringLiteral("/K"),
                          QStringLiteral("type"),
                          QStringLiteral("my_file.txt")};
    

    【讨论】:

    • 谢谢,它正在工作。我想,QProcess 像 system() 一样直接诉诸于 cmd。再问一个问题,但是为什么proc-&gt;start("fsutil file createnew m_file.txt 1000"); 在不运行 cmd.exe 的情况下工作?我尝试了这个命令并制作了文件。
    • @CaboomBom fsutil 是您可以找到的可执行文件。 type 不是。这就是区别。 cmd.exe 通过混合内部和外部命令来搅浑水,所以在任何时候你都无法确定什么是什么。恕我直言,这是典型命令 shell 的最大问题。内部和外部命令具有如此重大的性能差异,以至于将这种边界隐藏在荒谬中。它总是困扰着我,数以百万计的初学者被绊倒了。不好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 2012-11-08
    • 2013-09-22
    • 1970-01-01
    • 2021-01-24
    相关资源
    最近更新 更多