如何在 QProcess 中使用 cmd.exe 命令
Posted
技术标签:
【中文标题】如何在 QProcess 中使用 cmd.exe 命令【英文标题】:How to use cmd.exe commands in QProcess 【发布时间】: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);
【问题讨论】:
【参考方案1】:鉴于我在您的代码中没有看到"cmd.exe"
,因此我无法理解您的期望。您的系统上没有 type.exe
。您必须自己实际运行cmd.exe
,并将type
作为参数传递给它:
你会想要这样的东西:
QString command = QStringLiteral("cmd.exe");
QStringList argumentsQStringLiteral("/K"),
QStringLiteral("type"),
QStringLiteral("my_file.txt");
【讨论】:
谢谢,它正在工作。我想,QProcess 像 system() 一样直接诉诸于 cmd。再问一个问题,但是为什么proc->start("fsutil file createnew m_file.txt 1000");
在不运行 cmd.exe 的情况下工作?我尝试了这个命令并制作了文件。
@CaboomBom fsutil
是您可以找到的可执行文件。 type
不是。这就是区别。 cmd.exe
通过混合内部和外部命令来搅浑水,所以在任何时候你都无法确定什么是什么。恕我直言,这是典型命令 shell 的最大问题。内部和外部命令具有如此重大的性能差异,以至于将这种边界隐藏在荒谬中。它总是困扰着我,数以百万计的初学者被绊倒了。不好。以上是关于如何在 QProcess 中使用 cmd.exe 命令的主要内容,如果未能解决你的问题,请参考以下文章
Qt:无法使用 QProcess 启动 Windows 控制台
SSH 在 QProcess 中不起作用,但在控制台中起作用